适配器模式:设计模式系列(十二)
in Archived / Pattern
适配器模式(Adapter Pattern):是将一个跟调用者不兼容的接口适配为可兼容调用的设计模式,归类为结构型模式。
这一模式的解读分为以下几个方面:
- 功能的接口不能直接被调用者调用。
- 调用者通过适配器类调用此功能接口。
使用适配器模式的思考过程如下:
- 有需求需要用上某功能,但此功能因为接口不兼容,不能被当前调用者调用。
- 创建一个适配器类,专门用来配合调用者把不兼容的接口调整为兼容状态。
- 调用者就可以通过适配器,间接调用这个功能接口。
明确一下结构,适配器模式结构包括调用者实现类、适配器类、原功能接口类。
适配器模式示例代码如下(Swift语言):
class OriginalObject{
func show(){
print("I am show from OriginalObject");
}
}
protocol InvokerBluePrint{
func commnucate();
}
class Adapter1:OriginalObject,InvokerBluePrint{
func commnucate() {
super.show();
}
}
class Adapter2:InvokerBluePrint{
private var object:OriginalObject;
init(object:OriginalObject){
self.object = object;
}
func commnucate() {
self.object.show();
}
}
var invoker1:InvokerBluePrint = Adapter1();
invoker1.commnucate();
var invoker2:InvokerBluePrint = Adapter2(object: OriginalObject());
invoker2.commnucate();
代码分析:OriginalObject
是原接口功能类,而InvokerBluePrint
希望可以调用show
方法,但是不兼容,所以利用里氏替换原则,创建适配器类(Adapter1
是类适配器,Adapter2
是对象适配器),于是就看一看到invoker1
和invoker2
变量通过适配器类调用了OriginalObject
类的show
方法。以上代码输出结果如下:
I am show from OriginalObject
I am show from OriginalObject
总结:适配器模式是一种方便调用原生功能接口的设计模式,具有不错的灵活性和可扩展性,但同时要注意的是,因为很多语言不具备多继承的特性,所以要实现适配器模式的时候,具有一定局限。