日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16.适配器模式

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16.适配器模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1適配器模式的核心內容是:

A:兩種或多種不同類型的類。

B:通過適配器(Translator)讓另外一種(ForeignCenter)協同另外一者工作。達到類似player的功能

2適配器模式的作用:讓不是一種類型的類也同樣執行類似相同類的動作。

3橋接模式具體描述

適配器(變壓器)模式:把一個類的接口變換成客戶端所期待的另一種接口

從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。

適配類可以根據參數返還一個合適的實例給客戶端。

?

在朋友聚會上碰到了一個美女Sarah,從香港來的,

可我不會說粵語,她不會說普通話,只好求助于我的朋友kent了,

他作為我和Sarah之間的Adapter,讓我和Sarah可以相互交談了

(也不知道他會不會耍我)

4適配器模式類圖

5.代碼:

#include <iostream>

#include <string>

using namespace std;

//適配器(變壓器)模式:把一個類的接口變換成客戶端所期待的另一種接口

//,從而使原本因接口原因不匹配而無法一起工作的兩個類能夠一起工作。

//適配類可以根據參數返還一個合適的實例給客戶端。

//

//在朋友聚會上碰到了一個美女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;

??? }

};

?

//后衛,同樣是Player

class Backwards :public Player

{

public:

??? Backwards(string name) :Player(name){}

??? void attack()

??? {

??????? cout << name << " 后衛進攻" << endl;

??? }

??? void defence()

??? {

??????? cout << name << " 后衛防守" << endl;

??? }

};

?

/*************************************************

這里的ForeignCenter本來和Player并非同種類型的,本來不可以直接操作

但是它和Player有相同的特征

**************************************************/

class ForeignCenter

{

public:

??? string name;

??? ForeignCenter(string name)

??? {

??????? this->name = name;

??? }

??? void myAttack()

??? {

??????? cout << name << " 外籍中鋒進攻" << endl;

??? }

??? void myDefence()

??? {

??????? cout << name << " 外籍后衛防守" << 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()

{

??? //創建一個中鋒

??? Player *p1 = new Center("李俊宏");

??? p1->attack();

??? p1->defence();

?

??? Translator *tl = new Translator("姚明");

??? tl->attack();

??? tl->defence();

??? cin.get();

??? return 0;

}

運行結果如下:

總結

以上是生活随笔為你收集整理的16.适配器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。