大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
动机
在软件系统中,由于应用环境的变化,常常需要将”一些现存的对象”放在新的环境中应用.但是新的环境要求的接口是这些现存对象所不满足的.
如何应对这种”迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?
模式定义
将一个类的接口转换为客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作
实例
//目标接口(新接口)
class ITarget{
public:
virtual void process() = 0;
}
//遗留接口
class IAdaptee{
public:
virtual void foo(int data) = 0;
virtual int bar() = 0;
}
//遗留类
class OldClass : IAdaptee{
public:
public:
void foo(int data){
//..
};
int bar(){
//..
};
}
//对象适配器
class Adapter : public ITarget{
//对象
protected:
IAdaptee* pAdaptee; //组合
public:
Adapter(IAdaptee *PAdaptee){
this->pAdaptee = pAdaptee;
}
virtual void process(){
int data = pAdaptee->bar();
pAdatee->foo(data);
}
}
//类适配器
class Adapter : public ITarget,protected OldClass//多继承,这样不好 因为类被写死了
{
}
int main(){
IAdaptee* pAdaptee = new OldClass();
ITarget *pTarget = new Adapter(pAdaptee);
pTarget->process();
}
结构
要点总结
- Adapter 模式主要是应用于”希望复用一些现存的类.但是接口与服用环境要求不一样的情况”,在遗留代码复用,类库迁移方面非常有用
- GoF23定义了两种Adapter模式的实现接口:对象适配器和类适配器.但类适配器采用”多继承”的实现方式,一般不推荐使用,对象适配器采用”对象组合”的方式,更符合松耦合精神
- Adapter模式可以实现的非常另外,不必拘泥于Gof23中定义的两种接口.例如,完全可以将Adapter模式中的”现存对象”作为新的接口方法参数,来达到适配器目的
笔记
- 适配器得能适配 有内在实现层面的关联性 有内在功能的可复用性 ,可以把Adaptee转换为Itarget
- stl中的queue内部使用的就是deque
- Adapter就是把老接口转换成新接口
- 很多时候设计模式不能和结构体一摸一样 要灵活使用
- 不见得代码的设计和类图一一对应,设计模式对变换点 解决问题的手法 应用场景是否符合设计模式的定义 如果符合就是这个设计模式
- 软件行业的FrameWork经常能看到有Adapter
- 对象适配器就是组合对象
- public继承是符合他的接口规范 protected和private继承是实现继承 用它的实现
- 一般不使用类适配器 只使用 对象适配器
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168503.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...