当前位置: 首页 > news >正文

设计模式之七:适配器模式与外观模式

面向对象适配器将一个接口转换成另一个接口,以符合客户的期望。

// 用火鸡来冒充一下鸭子class Duck
{
public:virtual void quack() = 0;virtual void fly() = 0;
};class Turkey
{
public:virtual void gobble() = 0;virtual void fly() = 0;
};class TurkeyAdapter : public Duck
{
private:Turkey* turkey;public:TurkeyAdapter(Turkey* turkey){this->turkey = turkey;}virtual void quack(){turkey->gobble();}virtual void fly(){turkey->fly();}
};
  1. 客户通过目标接口调用适配器的方法对适配器发出请求。
  2. 适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。
  3. 客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。

实际上,适配器有两种,前面介绍的是“对象” 适配器。下面则是“类”适配器。

 接下来会马上介绍外观模式,我们在这里可以通过模式的设计意图区分装饰者、适配器和外观模式。

  • 装饰者:不改变接口,但加入责任
  • 适配器:将一个接口转换成另一个接口
  • 外观:让接口更简单(提供子系统的一个简化接口)

假如你组装了一套家庭观影系统,内含DVD播放器、投影机、自动屏幕、环绕立体声和爆米花机。当你想要观影的时候,必须先执行一些任务,如打开DVA、投影机、屏幕、音响、爆米花机,然后调整好声音,屏幕大小等。这十分的麻烦,因此,我们可以使用外观模式,提供一个方法,把以上内容都搞定。

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

“最少知识”原则:告诉我们要减少对象之间的交互,只和你的密友谈话。(也叫墨忒耳法则)

不要让太多类耦合在一起,免得修改系统中一部分,会影响到其它部分。就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:

  • 该对象本身
  • 被当作方法的参数而传进来的对象
  • 此方法所创建或实例化的任何对象
  • 对象的任何组件

 1

http://www.lryc.cn/news/122536.html

相关文章:

  • FFmpeg接收UDP码流
  • 【Pytroch】基于支持向量机算法的数据分类预测(Excel可直接替换数据)
  • 【Git】git初始化项目时 | git默认创建main分之 | 如何将git默认分支从main改为master
  • Vue3中配置environment
  • 前端基础积累_新技术_Vue_React_H5_奇怪的BUG_面试_招聘
  • 【密码学】维京密码
  • 小米基于 Flink 的实时计算资源治理实践
  • React源码解析18(3)------ beginWork的工作流程【mount】
  • JAVA SpringBoot 项目 多线程、线程池的使用。
  • 【数据结构与算法】动态规划算法
  • 离线安装vscode插件,导出 Visual Studio Code 的扩展应用,并离线安装
  • 【ChatGPT 指令大全】怎么使用ChatGPT辅助程式开发
  • 涂色
  • 微服务——数据同步
  • MySQL 手机选号(AABB、ABCD、DCBA、AAA),SQL SERVER 手机选号(AABB、ABCD、DCBA、AAA),通过规则查询靓号
  • 【server组件】——mysql连接池的实现原理
  • DSP开发:串口sci的发送与接收实现
  • 实训一 :Linux的启动、关机及登录
  • Redis分布式锁问题
  • windows安装apache-jmeter-5.6.2教程
  • 密码检查-C语言/Java
  • 基于Matlab实现心电信号小波特征提取和对应疾病识别仿真(附上源码+数据集)
  • 第五十二天
  • 爬虫练手项目——获取龙族小说全文
  • OpenCV图像处理——几何变换
  • Apache JMeter:完全指南
  • js obj 生成java 实体 entity
  • 【第二阶段】kotlin语言的匿名函数与具名函数
  • P1123 取数游戏
  • JavaScript高级:原型与原型链继承方式