16.适配器模式
1適配器模式的核心內(nèi)容是:
A:兩種或多種不同類型的類。
B:通過適配器(Translator)讓另外一種(ForeignCenter)協(xié)同另外一者工作。達到類似player的功能
2適配器模式的作用:讓不是一種類型的類也同樣執(zhí)行類似相同類的動作。
3橋接模式具體描述
適配器(變壓器)模式:把一個類的接口變換成客戶端所期待的另一種接口
從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。
適配類可以根據(jù)參數(shù)返還一個合適的實例給客戶端。
?
在朋友聚會上碰到了一個美女Sarah,從香港來的,
可我不會說粵語,她不會說普通話,只好求助于我的朋友kent了,
他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了
(也不知道他會不會耍我)。
4適配器模式類圖
5.代碼:
#include <iostream>
#include <string>
using namespace std;
//適配器(變壓器)模式:把一個類的接口變換成客戶端所期待的另一種接口
//,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。
//適配類可以根據(jù)參數(shù)返還一個合適的實例給客戶端。
//
//在朋友聚會上碰到了一個美女Sarah,從香港來的,
//可我不會說粵語,她不會說普通話,只好求助于我的朋友kent了,
//他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了
//(也不知道他會不會耍我)。
?
class Player
{
public:
??? string name;
??? Player(string name)
??? {
??????? this->name = name;
??? }
??? virtual void attack() = 0;
??? virtual void defence() = 0;
};
?
//前鋒,是Player類型的
class Forwards :public Player
{
public:
??? Forwards(string name) :Player(name){}
??? void attack()
??? {
??????? cout << name << " 前鋒進攻" << endl;
??? }
??? void defence()
??? {
??????? cout << name << " 前鋒防守" << endl;
??? }
};
?
//中鋒,同樣是Player類型
class Center :public Player
{
public:
??? Center(string name) :Player(name){}
??? void attack()
??? {
??????? cout << name << " 中鋒進攻" << endl;
??? }
??? void defence()
??? {
??????? cout << name << " 中鋒防守" << endl;
??? }
};
?
//后衛(wèi),同樣是Player
class Backwards :public Player
{
public:
??? Backwards(string name) :Player(name){}
??? void attack()
??? {
??????? cout << name << " 后衛(wèi)進攻" << endl;
??? }
??? void defence()
??? {
??????? cout << name << " 后衛(wèi)防守" << endl;
??? }
};
?
/*************************************************
這里的ForeignCenter本來和Player并非同種類型的,本來不可以直接操作
但是它和Player有相同的特征
**************************************************/
class ForeignCenter
{
public:
??? string name;
??? ForeignCenter(string name)
??? {
??????? this->name = name;
??? }
??? void myAttack()
??? {
??????? cout << name << " 外籍中鋒進攻" << endl;
??? }
??? void myDefence()
??? {
??????? cout << name << " 外籍后衛(wèi)防守" << endl;
??? }
};
?
/***************************************************
下面的相當于適配器,將不同類型的類也同樣能夠互相工作
****************************************************/
class Translator :public Player
{
private:
??? ForeignCenter *fc;
public:
??? Translator(string name) :Player(name)
??? {
??????? fc = new ForeignCenter(name);
??? }
??? void attack()
??? {
??????? fc->myAttack();
??? }
??? void defence()
??? {
??????? fc->myDefence();
??? }
};
?
int main()
{
??? //創(chuàng)建一個中鋒
??? Player *p1 = new Center("李俊宏");
??? p1->attack();
??? p1->defence();
?
??? Translator *tl = new Translator("姚明");
??? tl->attack();
??? tl->defence();
??? cin.get();
??? return 0;
}
運行結(jié)果如下:
總結(jié)
- 上一篇: 人民军队始终是党和人民完全可以信赖的英雄
- 下一篇: 18享元模式