设计模式-适配器模式
2017-10-05 07:26
197 查看
适配器模式(Adapter Pattern)
1. 目的是什么:
将一个类的借口转换成客户希望的另一种类的借口。通过接口模式的使用,可以使得原来由于接口不兼容而不能正常工作的那些类可以一起工作。
假设有一个接口类Target是客户期望的。
有另一个接口Adaptee,是客户所不能直接对接工作的。
此时客户想对接Adaptee进行工作。
2. 实现思路:
通过将Target里对应的函数设置为虚函数。
并设计Adapter适配器类public继承自Target,private继承自Adaptee类。
这样就实现了Adapter接口类指针可以指向Target类对象,又能在内部执行Adaptee类的行为。
3. 两种模式:
类适配器模式,分别对应于在类定义阶段就实现了适配器模式。
对象适配器模式,在执行过程中,将原来不能直接对接的类的对象,通过对象适配器类动态的对接。
4. 上代码://基于QT
客户原始可对接接口:
H文件
#ifndefADAPTEE_H
#defineADAPTEE_H
#include<iostream>
usingnamespacestd;
classAdaptee
{
public:
Adaptee();
virtual~Adaptee();
virtualvoidspecial_request();
};
#endif//ADAPTEE_H
CPP文件
#include"adaptee.h"
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
voidAdaptee::special_request()
{
cout<<"Adaptee::special_request()"<<endl;
}
客户希望对接接口:
H文件
#ifndefADAPTEE_H
#defineADAPTEE_H
#include<iostream>
usingnamespacestd;
classAdaptee
{
public:
Adaptee();
virtual~Adaptee();
virtualvoidspecial_request();
};
#endif//ADAPTEE_H
CPP文件
#include"adaptee.h"
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
voidAdaptee::special_request()
{
cout<<"Adaptee::special_request()"<<endl;
}
类适配器接口:
H文件
#ifndefCLASSADAPTER_H
#defineCLASSADAPTER_H
#include"target.h"
#include"adaptee.h"
classclassadapter:publicTarget,privateAdaptee
{
public:
classadapter();
virtual~classadapter();
virtualvoidrequest();
};
#endif
CPP文件
#include"classadapter.h"
classadapter::classadapter()
{
}
classadapter::~classadapter()
{
}
voidclassadapter::request()
{
cout<<"classadapter::request()"<<endl;
this->special_request();
cout<<"-------------------------"<<endl;
}
对象适配器接口
H文件
#ifndefOBJECTADAPTER_H
#defineOBJECTADAPTER_H
#include<iostream>
#include"target.h"
#include"adaptee.h"
usingnamespacestd;
classobjectadapter:publicTarget
{
public:
objectadapter();
objectadapter(Adaptee*adaptee);
virtual~objectadapter();
virtualvoidrequest();
private:
Adaptee*_adaptee;
};
#endif//OBJECTADAPTER_H
CPP文件
#include"objectadapter.h"
objectadapter::objectadapter():_adaptee(newAdaptee)
{
}
objectadapter::objectadapter(Adaptee*adaptee)
{
_adaptee=adaptee;
}
objectadapter::~objectadapter()
{
}
voidobjectadapter::request()
{
cout<<"objectadapter::request()"<<endl;
_adaptee->special_request();
cout<<"---------------------------"<<endl;
}
实验文件
#include<QCoreApplication>
#include<iostream>
#include"target.h"
#include"adaptee.h"
#include"classadapter.h"
#include"objectadapter.h"
usingnamespacestd;
intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
cout<<"Classadapter"<<endl;
Target*target1=newclassadapter();
target1->request();
cout<<endl<<endl;
cout<<"Objectadapter"<<endl;
Adaptee*adaptee=newAdaptee();
Target*target2=newobjectadapter(adaptee);
target2->request();
returna.exec();
}
1. 目的是什么:
将一个类的借口转换成客户希望的另一种类的借口。通过接口模式的使用,可以使得原来由于接口不兼容而不能正常工作的那些类可以一起工作。
假设有一个接口类Target是客户期望的。
有另一个接口Adaptee,是客户所不能直接对接工作的。
此时客户想对接Adaptee进行工作。
2. 实现思路:
通过将Target里对应的函数设置为虚函数。
并设计Adapter适配器类public继承自Target,private继承自Adaptee类。
这样就实现了Adapter接口类指针可以指向Target类对象,又能在内部执行Adaptee类的行为。
3. 两种模式:
类适配器模式,分别对应于在类定义阶段就实现了适配器模式。
对象适配器模式,在执行过程中,将原来不能直接对接的类的对象,通过对象适配器类动态的对接。
4. 上代码://基于QT
客户原始可对接接口:
H文件
#ifndefADAPTEE_H
#defineADAPTEE_H
#include<iostream>
usingnamespacestd;
classAdaptee
{
public:
Adaptee();
virtual~Adaptee();
virtualvoidspecial_request();
};
#endif//ADAPTEE_H
CPP文件
#include"adaptee.h"
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
voidAdaptee::special_request()
{
cout<<"Adaptee::special_request()"<<endl;
}
客户希望对接接口:
H文件
#ifndefADAPTEE_H
#defineADAPTEE_H
#include<iostream>
usingnamespacestd;
classAdaptee
{
public:
Adaptee();
virtual~Adaptee();
virtualvoidspecial_request();
};
#endif//ADAPTEE_H
CPP文件
#include"adaptee.h"
Adaptee::Adaptee()
{
}
Adaptee::~Adaptee()
{
}
voidAdaptee::special_request()
{
cout<<"Adaptee::special_request()"<<endl;
}
类适配器接口:
H文件
#ifndefCLASSADAPTER_H
#defineCLASSADAPTER_H
#include"target.h"
#include"adaptee.h"
classclassadapter:publicTarget,privateAdaptee
{
public:
classadapter();
virtual~classadapter();
virtualvoidrequest();
};
#endif
CPP文件
#include"classadapter.h"
classadapter::classadapter()
{
}
classadapter::~classadapter()
{
}
voidclassadapter::request()
{
cout<<"classadapter::request()"<<endl;
this->special_request();
cout<<"-------------------------"<<endl;
}
对象适配器接口
H文件
#ifndefOBJECTADAPTER_H
#defineOBJECTADAPTER_H
#include<iostream>
#include"target.h"
#include"adaptee.h"
usingnamespacestd;
classobjectadapter:publicTarget
{
public:
objectadapter();
objectadapter(Adaptee*adaptee);
virtual~objectadapter();
virtualvoidrequest();
private:
Adaptee*_adaptee;
};
#endif//OBJECTADAPTER_H
CPP文件
#include"objectadapter.h"
objectadapter::objectadapter():_adaptee(newAdaptee)
{
}
objectadapter::objectadapter(Adaptee*adaptee)
{
_adaptee=adaptee;
}
objectadapter::~objectadapter()
{
}
voidobjectadapter::request()
{
cout<<"objectadapter::request()"<<endl;
_adaptee->special_request();
cout<<"---------------------------"<<endl;
}
实验文件
#include<QCoreApplication>
#include<iostream>
#include"target.h"
#include"adaptee.h"
#include"classadapter.h"
#include"objectadapter.h"
usingnamespacestd;
intmain(intargc,char*argv[])
{
QCoreApplicationa(argc,argv);
cout<<"Classadapter"<<endl;
Target*target1=newclassadapter();
target1->request();
cout<<endl<<endl;
cout<<"Objectadapter"<<endl;
Adaptee*adaptee=newAdaptee();
Target*target2=newobjectadapter(adaptee);
target2->request();
returna.exec();
}
相关文章推荐
- Java设计模式之结构型模式-适配器模式(Adapter)
- 设计模式之适配器模式
- 设计模式读书笔记-----适配器模式
- 设计模式实战之--工厂模式结合适配器模式
- 设计模式之适配器模式
- Java设计模式之适配器模式
- java设计模式-适配器模式
- 【设计模式】适配器模式
- 设计模式---适配器模式
- 设计模式(二) 三种适配器模式 总结和使用场景
- Java设计模式-适配器模式
- Java设计模式构造型之适配器模式
- 设计模式之适配器模式
- php设计模式专题附源码(适配器模式、模板模式、命令模式、单例模式、观察者模式)
- 设计模式——适配器模式(Adapter)
- 设计模式--适配器模式(简要)(四)
- 设计模式第四天 适配器模式
- junit设计模式--适配器模式
- 23种设计模式 第二部分 结构模式(1) 适配器模式
- 设计模式之适配器模式