建立型模式學習完了,接下來學習的是結構性模式。結構型模式主要涉及到如何組合類和物件以獲得更大的結構,通常採用繼承機制來組合介面和實現。
首先學習的是介面卡模式。首先是介面卡的定義:
介面卡模式,將乙個類的介面轉換成客戶所希望的另外乙個介面。介面卡模式使得原來由於介面不相容而不能一起工作的類可以一起工作。
簡單的說當系統的資料和行為都正確時,但介面不符時,我們應該考慮使用介面卡模式。目的是是控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望用一些現存的類,但是介面又與復用環境要求不一致的情況。俗話說的好,智者千慮,必有一失。類的編寫者可能考慮不到後期軟體需求的變化。此時,介面卡模式就派上用場了。根據gof的設計模式,分為兩種類的設計模式和物件介面卡模式。
類介面卡模式的結構圖:
物件介面卡模式結構圖:
適用性
1 你想使用乙個已經存在的類,而他的介面不符合你的要求
2 你想建立乙個可以復用的類,該類可以與其他不相關的或不可預見的類協同工作
3 你想使用乙個已經存在的子類,但是不可能對每乙個都進行子類化以匹配他們的介面。物件介面卡可以適配它的父類介面。(僅適用於物件介面卡)
協作
client在adapter例項上呼叫一些操作。接著介面卡呼叫adaptee的操作實現這個請求。
類適配與物件適配的區別
類適配:
1 用乙個具體的adapter類對adapter和target進行匹配。結果是當我們想要匹配乙個類以及所有子類時,類adapter將不能勝任工作。
2 使得adapter可以重定義adaptee的部分行為,因為adapter是adaptee的乙個子類
3 僅僅引入乙個物件,並不需要額外的指標以間接得到adaptee
4使用多重繼承對乙個介面與另乙個介面進行匹配
物件適配:
1 允許乙個adapter與多個adaptee
2 使得重定義adaptee的行為比較困難
3依賴於物件組合
需要考慮的其他因素
1 adapter的匹配程度
2 可插入的adapter
3 使用雙向介面卡提供透明操作
例子,為了通用性因為很多語言並不支援多重繼承,這裡暫時先給出物件介面卡的例子
// adapter.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include "translate.h"
#include "bikeplayer.h"
int _tmain(int argc, _tchar* argv)
#pragma once
class player
;#pragma once
#include "player.h"
class basketballplayer : public player
;#include "basketballplayer.h"
#include
using namespace std;
basketballplayer::basketballplayer()
basketballplayer::~basketballplayer()
void basketballplayer::say()
#pragma once
#include "player.h"
class footballplayer : public player
;#include "footballplayer.h"
#include
using namespace std;
footballplayer::footballplayer()
footballplayer::~footballplayer()
void footballplayer::say()
#pragma once
#include "player.h"
#include "bikeplayer.h"
class translate : public player
;#include "translate.h"
translate::translate(bikeplayer* bikeplayer)
:m_bikeplayer(bikeplayer)
translate::~translate()
void translate::say()
#pragma once
class bikeplayer
;#include "bikeplayer.h"
#include
using namespace std;
bikeplayer::bikeplayer()
bikeplayer::~bikeplayer()
void bikeplayer::bsay()
設計模式學習 介面卡模式
介面卡在我們的生活中應用的十分廣泛,比如我們的筆記本電源,如果不用介面卡,那我們的筆記本將直接接入220v的交流電,出國的朋友肯定對三個插孔的轉換頭比較熟悉,這也是一種介面卡。顧名思義,介面卡模式 有時候也稱包裝樣式或者包裝 將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在...
介面卡模式 設計模式學習
介面卡模式 adapter 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。在軟體開發中,系統的資料行為都正確,但介面不符,我們應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...