介面卡模式 物件介面卡

2021-10-23 01:34:31 字數 2934 閱讀 7928

介面卡模式(adapter),將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原來由於不相容而不能一起工作的那些類可以一起工作。

介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。

在gof的設計模式中,對介面卡模式講了兩種型別,類介面卡模式和物件介面卡模式,類介面卡通過多重繼承對乙個介面與另外乙個介面進行匹配,其他一些語言不支援多重繼承,這裡我們主要講的是物件是介面卡。

target.h

#pragma once

#include

class

target

virtual

void

request();};

adaptee.h

#pragma once

#include

class

adaptee

};

adapter.h

#pragma once

#include

"target.h"

#include

"adaptee.h"

class

adapter

:public target

~adapter()

void

request

() override

private

: adaptee *m_adaptee;

};

客戶端:

#include

"adapter.h"

intmain()

執行結果:

特殊請求.

..

另外舉了乙個例子:姚明開始去nba打球,位置是中鋒,但是剛開始聽不懂教練的英語安排,於是就請了乙個翻譯,將教練的安排轉換成他能聽懂的中文。這個英語翻譯就是介面卡。(臆造出來的場景,實際上可能有偏差,見諒)

player.h

#pragma once

#include

class

player

virtual

~player()

virtual

void

attack()

=0;virtual

void

defence()

=0;protected

: std::string m_name;

};

前鋒forwads.h

#pragma once

#include

"player.h"

#include

class

forwards

:public player

void

attack

() override

void

defence

() override }

;

後衛guards.h

#pragma once

#include

"player.h"

#include

class

guards

:public player

void

attack

() override

void

defence

() override }

;

外籍中鋒foreigncenter.h:

外籍中鋒的進攻和防守,說的話是他的母語。

#pragma once

#include

#include

class

foreigncenter

std::string getname()

const

void

setname

(const std::string &name)

void

foreignattack()

void

foreigndefence()

private

: std::string m_name;

};

外籍中鋒配個翻譯translator.h:

#pragma once

#include

"player.h"

#include

"foreigncenter.h"

#include

class

translator

:public player

void

attack

() override

void

defence

() override

private

: foreigncenter *m_foreigncenter;

};

客戶端main.cpp

#include

"forwads.h"

#include

"guards.h"

#include

"translator.h"

intmain()

執行結果:

前鋒巴蒂爾進攻

後衛麥克格雷迪進攻

外籍中鋒姚明進攻

外籍中鋒姚明防守

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...