将一个类的接口转换成客户希望的另外一个接口
适配器模式( Adapter),将一个类的接口转换成客户希望的另外一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式包括类适配器和对象适配器两种,类适配器是适配器类同时实现目标抽象类和适配者类,这样需要编程语言支持多继承。
class Target:
def show(self):
print("Target")
class Adaptee:
def show(self):
print("Adaptee")
class Adapter(Target, Adaptee):
def show(self):
Adaptee().show()
class Client:
def test(self, target: Target):
target.show()
if __name__ == '__main__':
Client().test(Adapter())
对象适配器实现了其中一个对象的接口, 并对另一个对象进行封装。
如客户端必须需要一个Target
类型的对象
public interface Target {
}
public class Client {
public void test(Target target){
System.out.println(target);
}
}
但却只能提供一个Give
类型对象(Target
和Give
只是类型不同,数据和行为都相同)
public class Give {
void show(){
System.out.println(" Give ");
}
}
为了可以让让Give
正常工作,使用适配器模式,定义一个适配器类(或接口),实现目标接口,封装提供的接口对象
public class Adapter implements Target {
private Give give;
Adapter(Give give){
this.give = give;
}
public void show() {
give.show();
}
}
这样先把Give
对象传递给Adapter
再把Adapter
对象传给Client
就可以让Give
和Client
一起正常工作了。
public static void main(String[] args) {
new Client().test(new Adapter(new Give()));
}
优点:
缺点: