设计模式(6)-适配器模式及实现
基本概念
通过引入一个适配器类来充当中间人,将一个接口转换成另一个接口,使得两个不兼容的对象能够协同工作。适配器类包含一个对不兼容接口的引用,并实现了你期望的目标接口。这样,当你需要使用目标接口的时候,可以通过适配器来调用原本不兼容的类的方法。
优点:
适配器模式的应用可以使得现有的代码与新代码能够无缝协同工作,从而提高了代码的可重用性。它允许你将不同系统、库或组件整合在一起,而无需对现有代码进行大量修改。
缺点:
适配器模式也可能引入一些复杂性,因为你需要维护适配器类和处理不同接口之间的映射关系。
https://gitee.com/want-to-lose-another-30-jin/design-pattern-implementation
设计模式具体实现
角色
1、Target(目标接口):定义客户端使用的特定领域相关的接口。
2、Adaptee(被适配者):一个已经存在的类,需要适配。
3、Adapter(适配器):通过在内部包装一个Adaptee对象,把源接口转换成目标接口。
java实现
package com.shejimoshi.shipeiqimoshi;
// 目标接口
public interface Target {
void request();
}
package com.shejimoshi.shipeiqimoshi;
// 被适配者
public class Adaptee {
public void specificRequest() {
System.out.println("特定请求被调用");
}
}
package com.shejimoshi.shipeiqimoshi;
// 适配器
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
package com.shejimoshi.shipeiqimoshi;
public class client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.request();
}
}
c++实现
#include<iostream>
using namespace std;
// 目标接口
class Target {
public:
virtual ~Target() {}
virtual void request() = 0;
};
// 被适配者
class Adaptee {
public:
void specificRequest() {
std::cout << "特定请求被调用" << std::endl;
}
};
// 适配器
class Adapter : public Target {
private:
Adaptee* adaptee;
public:
Adapter(Adaptee* adaptee) : adaptee(adaptee) {}
void request() override {
adaptee->specificRequest();
}
};
int main() {
Adaptee* adaptee = new Adaptee();
Target* target = new Adapter(adaptee);
target->request();
delete target;
delete adaptee;
return 0;
}