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

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

cpp 复制代码
// 用火鸡来冒充一下鸭子

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

相关推荐
workflower1 天前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
折哥的程序人生 · 物流技术专研1 天前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
老码观察1 天前
设计模式实战解读(八):代理模式——控制访问的隐形中间层
设计模式·代理模式
我爱cope1 天前
【Agent智能体12 | 反思设计模式-使用外部反馈】
人工智能·设计模式·语言模型·职场和发展
geovindu1 天前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
我爱cope1 天前
【Agent智能体11 | 反思设计模式-评估反射的影响的方法】
人工智能·设计模式·语言模型·职场和发展
nnsix1 天前
设计模式 - 迭代器模式 笔记
笔记·设计模式·迭代器模式
geovindu1 天前
go: Bounded Parallelism Pattern
开发语言·后端·设计模式·golang·有界并行模式
IT策士1 天前
第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
设计模式·容器·kubernetes
qq_297574672 天前
设计模式系列文章(基础篇第 11 篇):模板方法模式——定义算法骨架,实现代码复用与流程统一
算法·设计模式·模板方法模式