设计模式学习(十六)————适配器模式
来源:互联网 发布:cms摄像头监控软件设置 编辑:程序博客网 时间:2024/06/05 08:40
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
注意:如果能事先将软件的接口设计为相同,就尽量不用适配器模式,只有确实需要转换接口时才使用!
下面通过打篮球时候需要翻译来举例子:
#ifndef BASKETBALLPLAYER#define BASKETBALLPLAYER#include <QtDebug>#include <QString>class Player{public: explicit Player(QString name):_name(name){} virtual void Attack() = 0; virtual void Defense() = 0; virtual ~Player() = default;protected: QString _name;};class Forwards final:public Player{public: explicit Forwards(QString name):Player(name){} void Attack() override { qDebug()<<"前锋"<<_name<<"攻击!"; } void Defense() override { qDebug()<<"前锋"<<_name<<"防守!"; }};class Center final:public Player{public: explicit Center(QString name):Player(name){} void Attack() override { qDebug()<<"中锋"<<_name<<"攻击!"; } void Defense() override { qDebug()<<"中锋"<<_name<<"防守!"; }};class Guards final:public Player{public: explicit Guards(QString name):Player(name){} void Attack() override { qDebug()<<"后卫"<<_name<<"攻击!"; } void Defense() override { qDebug()<<"后卫"<<_name<<"防守!"; }};class ForeignCenter{public: ForeignCenter() = default; void TranslateAttack() { qDebug()<<"翻译后:中锋"<<_name<<"攻击!"; } void TranslateDefense() { qDebug()<<"翻译后:中锋"<<_name<<"防守!"; } void setName(QString name){_name = name;} QString getName(){return _name;}private: QString _name;};class Translator final:public Player //相当于适配器{public: explicit Translator(QString name):Player(name){_fc = QSharedPointer<ForeignCenter>(new ForeignCenter());_fc->setName(name);} void Attack() override { _fc->TranslateAttack(); } void Defense() override { _fc->TranslateDefense(); }private: QSharedPointer<ForeignCenter> _fc;};#endif // BASKETBALLPLAYER#include "basketballplayer.h"int main(int argc, char *argv){ Player *ch = new Translator("姚明"); ch->Attack(); ch->Defense(); return 0;}
根据代码可以发现,适配器模式实际上就是在需要的类中保存另一个类的实例,通过调用所需要的接口的函数来从另一个类的实例中找到相关的方法来实现这个接口,完成了不同接口之间的适配。一般在两种不同的接口需要相互调用的时候来构造适配器方便他们之间的相互访问。
最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/translate_adapter_pattern_17
1 0
- 设计模式学习(十六)————适配器模式
- Java设计模式学习—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 十六、迭代器模式——设计模式学习笔记
- 设计模式学习笔记(十六)—Proxy模式
- 设计模式学习笔记(十六)—Proxy模式
- 设计模式—迭代器模式(十六)
- 设计模式学习笔记——适配器模式
- 设计模式学习笔记——适配器模式
- 设计模式学习(七)——适配器模式
- 设计模式学习笔记——适配器模式
- BootStrap-table 客户端分页和服务端分页的区别
- tensorflow笔记:流程,概念和简单代码注释
- VS2015使用小技巧 VS2015编写HTML时下方显示设计 拆分 源
- 模板类派生普通类
- my first C
- 设计模式学习(十六)————适配器模式
- TCP-IP详解:AH(Authentication Header)
- cygwin 开发环境配置
- 【UML】— 对象图
- 设计模式学习(十七)————备忘录模式
- 《暗时间》笔记
- C#-多线程数据同步容易出现的异常问题
- 源码-JavaScript&jQuery交互式前端开发-第3章-函数、方法与对象-使用字面量语法创建对象
- 《java编程思想》第二章:一切都是对象