案例分析:设计模式与代码的结构特性
Posted ustc-yz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了案例分析:设计模式与代码的结构特性相关的知识,希望对你有一定的参考价值。
什么是适配器模式?
在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
适配器模式(Adapter)包含以下主要角色:
- 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
- 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
- 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
适配器模式的传统实现如下图所示:
使用场景
- 系统需要使用现有的类,但是现有的类的接口与系统接口的设计不一致
- 系统中存在一个重复使用的类,该类需要与其他没有关联的类结合使用,但是这些类的接口与该类的接口不兼容
- 通过接口转换,将一个类插入另一个类中
应用范例
现在手上有一台android的手机,但是只有一条只支持苹果的线,所以需要使用一个适配器将Android的接口转换为苹果的接口,使用代码来模拟这个过程。
此时我们就可以使用适配器模式来对这个过程进行模拟:
定义一个安卓接口的类:
class AndroidPort { public: void port() { cout << "android接口" << endl; } };
定义一个苹果接口的类:
class ApplePort { public: void port() { cout << "Apple接口" << endl; } };
定义一个适配器,提供安卓接口转换为苹果接口的功能:
class Adapter : public AndroidPort {
public:
Adapter(ApplePort apple_port) : apple_port_(apple_port){
}
void port() {
apple_port_.port();
}
private:
ApplePort &apple_port_;
};
测试代码:
int main() { ApplePort apple_port; Adapter adapter(apple_port); adapter.port(); return 0; }
测试结果输出“Apple接口”
适配器模式的优缺点分析
优点:
- 使用适配器模式可以让两个没有关联的类一起工作,使得各个模块之间的拆分十分灵活。
- 适配器模式可以带来更好的复用性,通过适配器模式就可以让不符合系统接口要求的代码得到更好的复用。
- 提高模块的解耦性,更换功能只需要修改目标接口类以及适配器类中的示例
缺点:
- 带来了代码的冗余,使用过多使代码的设计看起来混乱
以上是关于案例分析:设计模式与代码的结构特性的主要内容,如果未能解决你的问题,请参考以下文章