c++ 设计模式23讲之适配器模式

适配器模式


定义:

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

优点:

(1)将目标类和适配器类解耦合

(2)提高类透明性和复用性

(3)扩展灵活性和扩展性

缺点:

(1)适配类成为最耦合部分

使用范围:

已存在目标类和适配者类,还需知晓二者的转换关系。

结构:

实现110v适配目标220v的案例:


实现:


适配模式(adapter_pattern)属于结构型模式(structural_pattern),所以定义了namespace structural_pattern的命名空间。

开发IDE:vs2015

C++11特性

类的定义声明如下:

namespace structural_pattern
{
	class target220v
	{
	public:
		virtual void charging_stand() = 0;
	};

	class target220v_china : public target220v
	{
	public:
		virtual void charging_stand() override
		{
			std::cout << "适配中国220v电压电器" << std::endl;
		}
	};

	class adapter110v
	{
	public:
		virtual void charging() = 0;
	};


	class adapter_pattern :  public adapter110v
	{
	public:
		virtual void charging() override
		{
			std::cout << "提供美国电压110v" << std::endl;
			std::unique_ptr<target220v> temp{ new target220v_china };
			to220v = std::move(temp);
			to220v->charging_stand();
		}

	private:
		std::unique_ptr<target220v> to220v;
	};
}


测试:


基于GoogleTest 的单元测试框架;框架可参考如下网址:

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

using  namespace structural_pattern;
TEST(test_adapter_pattern_charging, success_charge)
{
	std::unique_ptr<adapter110v> adapter{ new adapter_pattern()};
	adapter->charging();
}


总结

(1)适配类是继承目标类,增加适配者的成员变量

(2)考虑到适配者的扩展性,最好以抽象代替细节

(3)双向适配情况,适配类需继承目标类和适配者类(多继承)

(4)适配类用has a来调用适配者类比is a更解耦合(合成复用原则)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值