標籤:c++ 物件導向 設計模式 適配器模式
適配器模式(Adapter):將一個類的介面轉換成客戶希望的另一個介面。使得原本介面不相容而不能在一個工作的那些類可以一起工作。
使用情境:當系統的資料和行為都正確,但介面不同時,我們可以考慮使用適配器模式來匹配介面。主要應用在希望複用一些存在的類,但是介面又和複用環境要去不同時使用。
#ifndef ADAPTER_H#define ADAPTTE_H#include<iostream>#include<string>using namespace std;class Player{protected:string name;public:virtual void Attack()=0;virtual void Defense() = 0;};class Forwards :public Player{public:Forwards(string n) {name = n; }void Attack(){cout << "前鋒 " << name << " 進攻。\n";}void Defense(){cout << "前鋒 " << name << " 防守。\n";}};class Guards :public Player{public:Guards(string n) { name = n; }void Attack(){cout << "後衛 " << name << " 進攻。\n";}void Defense(){cout << "後衛 " << name << " 防守。\n";}};class ForeignCenter :public Player{friend class Translator;//聲明Translator為友元類,專業它就可以訪問ForeignCenter裡面的資訊,即翻譯可以和外國球員交流public:ForeignCenter(){}ForeignCenter(string n) { name = n; }private://聲明為私人意味著外籍中鋒不能明白教練進攻和防守的意圖。void Attack(){cout << "中鋒 " << name << " 進攻。\n";}void Defense(){cout << "中鋒 " << name << " 防守。\n";}};class Translator :public Player{ForeignCenter Fcenter;public:Translator(string n){ Fcenter.name=n; }void Attack(){Fcenter.Attack();}void Defense(){Fcenter.Defense();}};#endif
#include"Adapter.h"int main(){Guards mc("麥迪");mc.Attack();mc.Defense();Forwards Bt("巴蒂爾");Bt.Defense();Bt.Attack();Translator Meimei("姚明");//聲明Meimei是姚明的翻譯,當Meimei響應進攻時,就是Meimei告訴姚明要進攻Meimei.Attack();Meimei.Defense();return 0;}
設計模式C++實現十三:適配器模式