设计模式之适配器模式

定义

适配器模式将一个接口转换成为客户想要的另一个接口,它使接口不兼容的哪些类可以一起工作。比如电脑电源适配器的设计原理就是一个典型的适配器模式,电脑电源作为客户调用电源线接口,电源线作为适配器(公)连接插座(母适配器)取得电。

类与对象的关系

  • Target(目标抽象类):定义客户要用的特定领域的接口
  • Adapter(适配器):调用另一个接口,作为一个转换器;(公接口)
  • Adap(适配器):定义一个接口,Adapter需要接入;(母接口)
  • Client(客户调用类)

实例说明

举一个简单的例子,一个公司内部有自己的保洁系统,公司各处都需要清洁,但是对于一些机器设备,不仅要清洁,还要定期维护,这时候,不需要对原来的清洁类(Clean)做任何更改,我们只需要增加一个适配器类(Extraclean)以适用于需要定期维护的设备,这个过程可以用适配器模式实现,下面是简单的C++过程:

//适配器模式   -----  保洁系统
#include <iostream>
using namespace std;

class Clean           
{
public:
	virtual void makeclean () = 0;
};

class office : public Clean
{
public:
	void makeclean ()
	{
		cout << "办公室清洁" << endl;
	}
};

class corridor : public Clean
{
public:
	void makeclean()
	{
		cout << "过道清洁" <<endl;
	}
};

//对于设备,不仅要清洁,还需要维护
class Extraclean : public Clean
{
public:
	virtual void takecare() = 0;
};

class equipment : public Extraclean
{
public:
	void makeclean()
	{
		cout << "设备清洁" << endl;
	}
	void takecare()
	{
		cout << "设备维护" << endl;
	}
};

class Client
{
public:
	static void jobs (int type, Clean *c)
	{
		if (NULL == c || type < 0)
		{
			return;
		}
		if (type == 1)
		{
			c -> makeclean();
			((Extraclean*)c) -> takecare();
		}

		else
		{
			c -> makeclean();
		}
	}
};


int main()
{
	Extraclean *e = new equipment();
	Client :: jobs(1,e);

	Clean *c1 = new office();
	Clean *c2 = new corridor();
	Client ::jobs(0,c1);
	Client ::jobs(0,c2);

	cout << endl;
	delete c2;
	delete c1;
	delete e;

	return 0;
}

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值