adapter模式
2016-06-30 16:03
232 查看
Adapter
一. 意图
将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.
二.适用性
1. 想使用一个已经存在的类,而接口不符合你的需求
2. 想创建一个可以复用的类,而该类与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作.
3. (仅使用与对象Adapter)想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口.对象适配器可以适配它的父类接口.
三.注意事项
适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题,没有一个系统分析师会在做详细设计的时候考虑使用适配器模式,这个模式使用的主要场景是扩展应用中。类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系。
四.代码
#include<iostream>
usingnamespacestd;
//adaptermode
classCTarget
{
public:
virtualvoidRequest()
{
cout<<"CTarget::Request"<<endl;
}
};
classCAdaptee
{
public:
voidSpecificRequest()
{
cout<<"CAdaptee::SpecificRequest"<<endl;
}
};
//类适配器,public继承获得接口继承的效果,private继承获得实现继承的效果
classCAdapterClass:publicCTarget,privateCAdaptee
{
public:
virtualvoidRequest()
{
this->SpecificRequest();
}
};
//对象适配器,继承Target类,采用组合的方式实现Adaptee的复用
classCAdapterObject:publicCTarget
{
public:
virtualvoidRequest()
{
m_adaptee.SpecificRequest();
}
private:
CAdapteem_adaptee;
};
intmain()
{
cout<<"HelloWorld!"<<endl;
//类模式adapter
CTarget*target=newCTarget();
target->Request();
//类适配器
CTarget*adapterClass=newCAdapterClass();
adapterClass->Request();
//对象适配器
CTarget*adapterObject=newCAdapterObject();
adapterObject->Request();
return0;
}
一. 意图
将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.
二.适用性
1. 想使用一个已经存在的类,而接口不符合你的需求
2. 想创建一个可以复用的类,而该类与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作.
3. (仅使用与对象Adapter)想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口.对象适配器可以适配它的父类接口.
三.注意事项
适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题,没有一个系统分析师会在做详细设计的时候考虑使用适配器模式,这个模式使用的主要场景是扩展应用中。类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系。
四.代码
#include<iostream>
usingnamespacestd;
//adaptermode
classCTarget
{
public:
virtualvoidRequest()
{
cout<<"CTarget::Request"<<endl;
}
};
classCAdaptee
{
public:
voidSpecificRequest()
{
cout<<"CAdaptee::SpecificRequest"<<endl;
}
};
//类适配器,public继承获得接口继承的效果,private继承获得实现继承的效果
classCAdapterClass:publicCTarget,privateCAdaptee
{
public:
virtualvoidRequest()
{
this->SpecificRequest();
}
};
//对象适配器,继承Target类,采用组合的方式实现Adaptee的复用
classCAdapterObject:publicCTarget
{
public:
virtualvoidRequest()
{
m_adaptee.SpecificRequest();
}
private:
CAdapteem_adaptee;
};
intmain()
{
cout<<"HelloWorld!"<<endl;
//类模式adapter
CTarget*target=newCTarget();
target->Request();
//类适配器
CTarget*adapterClass=newCAdapterClass();
adapterClass->Request();
//对象适配器
CTarget*adapterObject=newCAdapterObject();
adapterObject->Request();
return0;
}
相关文章推荐
- ScrollView嵌套ListView和Gridview冲突问题的最优解决方案
- pull解析(原始xml文件放到assets中)
- Java集合详解系列----Java集合继承体系详解
- Socket.IO 内置事件
- 【jmeter】目录介绍
- UnsharpMask锐度清晰度调整
- 345. Reverse Vowels of a String
- SparkSQL(下)--Spark实战应用
- 不能远程连接linux的mysql服务器
- POJ 3071 Football
- nginx + lua + redis
- javaweb 写mysql数据库中文乱码
- 为什么高并发系统都喜欢玩异步
- JQuery之DOM操作
- 事件委托和事件绑定
- 为什么高并发系统都喜欢玩异步
- 知新之--12-factors
- C可变参数函数 实现
- 阿里云终端连接与实例管理
- Android开发学习之路-带文字的图片分享