博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式C++实现-第17章-适配器模式
阅读量:5795 次
发布时间:2019-06-18

本文共 1721 字,大约阅读时间需要 5 分钟。

一、UML图

关键词:Client须要Request()函数,Adaptee提供的是SpecificRequest()函数,Adapter提供一个Request()函数将Adaptee和SpecificeRequest()函数封装起来。

二、概念

适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来因为接口不兼容而不能一起工作的那些类能够一起工作。

三、说明

角色:

(1)Target:这是客户所期待的接口,Target能够是详细的或抽象的类,也能够是接口。

(2)Adaptee:须要适配的类。

(3)Adapter:通过在内部包装一个Adaptee对象,把源接口转换成目标接口。

什么时候用?

(1)在想使用一个已存在的类,可是假设他的接口,也就是它的方法和你的要求不同样时,就应该考虑用适配器模式。

(2)用了适配器模式。客户代码能够统一调用统一接口即可了,这样能够更简单。更直接,更紧凑。

(3)要在两方都不太easy改动的时候再使用适配器模式适配,而不是一有不同是就使用它。

四、C++实现

(1)Adapter.h

#ifndef ADAPTER_H#define ADAPTER_H#include 
#include
//Target,此处为运动员class Player{protected: std::string name;public: Player(std::string name) { this->name=name; } virtual void Attack()=0; virtual void Defense()=0;};//Adaptee,此处为外籍中锋。它的接口和Target的接口不一样,需要翻译来帮忙转换class ForeignCenter{private: std::string name;public: void SetName(std::string name) { this->name=name; } std::string GetName() { return name; } void ForeignAttack() { std::cout<<"外籍中锋 "<
<<" 进攻"<
SetName(name); } ~Translator() { delete wjzf; } void Attack() { wjzf->ForeignAttack(); } void Defense() { wjzf->ForeignDefense(); }};//以下是普通的 接口和Target接口一样的 3个子类,必需要翻译//前锋class Forwards:public Player{public: Forwards(std::string name):Player(name){} void Attack() { std::cout<<"前锋 "<
<<" 进攻"<

(2)Client.cpp

#include "Adapter.h"#include 
#include
#include
//Clientvoid main(){ Player* b=new Forwards("巴蒂尔"); b->Attack(); Player* m=new Guards("麦克格雷迪"); m->Attack(); //翻译告诉姚明。教练让你既要进攻,又要防守 Player* ym=new Translator("姚明"); ym->Attack(); ym->Defense(); delete b; delete m; delete ym; system("pause");}

(3)执行截图

你可能感兴趣的文章
JDK 1.8 ArrayList源码解读
查看>>
你看到的大多数小程序,可能都在做错误的事情
查看>>
容器技术逐渐成熟 终将被大企业所接受
查看>>
Faceu完成B轮融资 未来产品将定位短视频聊天
查看>>
太阳能“光热”盛宴冷思:前景可期但挑战犹存
查看>>
全球自储存收购Tuxis三项资产
查看>>
MSSQL · 实现分析 · Extend Event实现审计日志对SQL Server性能影响
查看>>
中兴通讯NFV走向商用 虚拟化网关成功中标中国移动集采
查看>>
CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
查看>>
NIO-SelectableChannel
查看>>
跟屌丝一起学习 DB2 第五课 存储过程(三) 存储过程实例
查看>>
PAAS平台的web应用性能测试与分析
查看>>
wiki 调研
查看>>
天龙光电开拓光伏下游应用受挫
查看>>
测试用例及时更新的可实施性
查看>>
SQL数据库性能测试,插入数据
查看>>
以金融安全为生命线 金融支付打开智慧城市的想象空间
查看>>
OA办公系统如何实现高效办公用品管理
查看>>
用社会共治应对网络病毒
查看>>
本溪移动促进物联网业务发展
查看>>