设计模式(3)--对象结构(1)--适配器

1. 意图

    将一个类的接口转换成客户希望的另外一个接口。

    适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2. 三种角色

    目标(Target)、被适配者(Adaptee)、适配器(Adapter)

3. 优点

    3.1 类适配器

      a. Adapter可以重定义Adaptee的部分行为,因为Adapter是它的一个子类。

      b. 仅仅引入了一个对象,不需要额外的指针得到Adaptee。

    3.2 对象适配器 

      a. 允许一个Adapter与多个Adaptee(其本身及它的所有子类)。

4. 缺点

    4.1 类适配器

       a. 一个Adapter只能对应一个Adaptee(不能适配其子类)。

    4.2 对象适配器 

       a. Adapter需要额外的指针得到Adaptee。

       b. 重定义Adaptee的行为比较困难,需要生成Adaptee子类使得Adapter引用这个子类。

5. 相关模式

    5.1 Adapter是改变一个已有对象的接口,而Bridge是将接口和实现分离。

    5.2 Decorator是增强其他对象的功能,但不改变它的接口,且支持递归组合。而Adapter不行。

    5.3 Proxy在不改变它的接口的条件下,为另一个对象定义了一个代理。

6. 代码示意(C++)
#pragma once
#include <iostream>
using namespace std;

class Target
{
public:
	virtual void Request()
	{
		cout << "Target普通的请求" << endl;
	}
};

class Adaptee
{
public:
	virtual void SpecificalRequest()
	{
		cout << "Adaptee特殊请求" << endl;
	}
};

class ClassAdapter : public Target, public Adaptee
{
public:
	virtual void Request()
	{
		SpecificalRequest();
		Target::Request();
	}
};

class ObjectAdapter : public  Target
{
private:
	Adaptee* m_pAdaptee;
public:
	virtual void Request()
	{
		m_pAdaptee->SpecificalRequest();
		Target::Request();
	}
	ObjectAdapter()
	{
		m_pAdaptee = new Adaptee();
	}
	~ObjectAdapter()
	{
		delete m_pAdaptee;
	}
};
#include "Target.h"
int main() {

	ClassAdapter* pClassAdapter = new ClassAdapter;
	pClassAdapter->Request();

	ObjectAdapter* pObjectAdapter = new ObjectAdapter;
	pObjectAdapter->Request();

	delete pClassAdapter;
	delete pObjectAdapter;

	return 0;
}

运行结果:

6.1 类适配器ClassAdapter可以重新实现SpecificalRequest(3.1.a)

6.2 对象适配器ObjectAdapter不需要修改代码,就可以对Adaptee的子类同样适配(3.2.a)

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值