设计模式之适配器模式(Adapter)

适配器模式

1.作用

(1)软件复用

将某个类的接口转换成另一个客户期待的接口

(2)接口转换

实现了接口不匹配的类间通信,兼容性

 

2.类图

代码实现如下:

(1)通过子对象实现

# include <iostream>
using namespace std;

class Adaptee{
	public :
		void Adapteepro(){
			cout<<"这是Adaptee实现的方法"<<endl; 
		}
}; 

class Adapter{
	private:
		Adaptee objAdaptee;
	public :
		void Adapterpro(){
			objAdaptee.Adapteepro();
		}
};

int main(void){
	Adapter objAdapter;
	objAdapter.Adapterpro();
}

运行结果如下:

这是Adaptee实现的方法

 

(2)通过指针实现

# include <iostream>
using namespace std;

class Adaptee{
	public:
		void Adapteepro(){
			cout<<"这是Adaptee的实现方法"<<endl; 
		}
};

class Adapter{
	private:
		Adaptee*adaptee;
	public:
		Adapter(Adaptee *t){
			adaptee=t;
		}
		
		void Adapterpro(){
			adaptee->Adapteepro();
		}
		
		~Adapter(){
			cout<<"这是Adapter的析构函数"<<endl;
			delete adaptee;
			cout<<"释放了adaptee"<<endl; 
		}
}; 

int main(void){
	Adaptee *adaptee=new Adaptee();
	Adapter *adapter=new Adapter(adaptee);
	adapter->Adapterpro();
	delete adapter;
	cout<<"释放了adapter"<<endl; 
}

运行结果如下:

这是Adaptee的实现方法
这是Adapter的析构函数
释放了adaptee
释放了adapter

注:

先释放了adaptee,再释放了adapter

内部理解图如下:

 

3.适配器模式实例

(1)类图

Adaptee中的method方法是带参函数

而Adapter中的method方法不带参数,整个继承体系也都不带参数

为了保证多态体系的存在,进行适配器模式

 

代码实现如下

# include <iostream>
using namespace std;

class Adaptee{
	public:
		void method(int n){
			cout<<"Adaptee n="<<n<<endl; 
		}
};

class AdapterBase{
	public:
		virtual void method()=0;
		virtual ~AdapterBase(){
			cout<<"这是AdapterBase的析构函数"<<endl; 
		}
};

class AdapterA :public AdapterBase{
	public:
		void method(){
			cout<<"这是AdapterA的method"<<endl; 
		}
		
		~AdapterA(){
			cout<<"这是AdapterA的析构函数"<<endl; 
		}
};

class AdapterB :public AdapterBase{
	private:
		Adaptee *adaptee;
	public:
		AdapterB(){
			adaptee=new Adaptee();
		}
		void method(){
			cout<<"这是AdapterB的method"<<endl; 
			adaptee->method(6);
		}
		
		~AdapterB(){
			cout<<"这是AdapterB的析构函数"<<endl; 
		}
};

class AdapterC :public AdapterBase{
	public:
		void method(){
			cout<<"这是AdapterC的method"<<endl; 
		}
		
		~AdapterC(){
			cout<<"这是AdapterC的析构函数"<<endl; 
		}
};

int main(void){
	AdapterB *pb=new AdapterB();
	pb->method();
}

运行结果如下:

这是AdapterB的method
Adaptee n=6

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值