适配器模式:设计模式系列(十二)

  适配器模式(Adapter Pattern):是将一个跟调用者不兼容的接口适配为可兼容调用的设计模式,归类为结构型模式。

  这一模式的解读分为以下几个方面:

  • 功能的接口不能直接被调用者调用。
  • 调用者通过适配器类调用此功能接口。

  使用适配器模式的思考过程如下:

  1. 有需求需要用上某功能,但此功能因为接口不兼容,不能被当前调用者调用。
  2. 创建一个适配器类,专门用来配合调用者把不兼容的接口调整为兼容状态。
  3. 调用者就可以通过适配器,间接调用这个功能接口。

  明确一下结构,适配器模式结构包括调用者实现类、适配器类、原功能接口类。

适配器模式示例代码如下(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是对象适配器),于是就看一看到invoker1invoker2变量通过适配器类调用了OriginalObject类的show方法。以上代码输出结果如下:

I am show from OriginalObject
I am show from OriginalObject

  总结:适配器模式是一种方便调用原生功能接口的设计模式,具有不错的灵活性和可扩展性,但同时要注意的是,因为很多语言不具备多继承的特性,所以要实现适配器模式的时候,具有一定局限。


lZackx © 2022. All rights reserved.

Powered by Hydejack v9.1.6