外观模式:设计模式系列(十一)

  外观模式(Facade Pattern):是一个可以通过统一对象调用子系统对象的设计模式,归类为结构型模式。

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

  • 有很多子系统对象在一个功能中需要被调用。
  • 外观实现类可以统一调用这些需要的子系统功能。

  使用外观模式的思考过程如下:

  1. 有一个功能方法需要调用很多子系统相关的方法。
  2. 直接在调用处写下一堆子系统方法需要查阅很多接口。
  3. 使用一个外观实现类,对这个功能方法进行封装,需要此功能的时候,直接调用一个方法就可以了。

  明确一下结构,外观模式结构包括一些子系统实现类、外观实现类。

外观模式示例代码如下(Swift语言):

class Facade{
    
    private var ss1:SubSystem1?;
    private var ss2:SubSystem2?;
    private var ss3:SubSystem3?;
    
    init(){
        ss1 = SubSystem1();
        ss2 = SubSystem2();
        ss3 = SubSystem3();
    }
    
    func communicate(){
        self.ss1!.show();
        self.ss2!.tell();
        self.ss3!.speak();
    }
}

class SubSystem1{
    
    func show(){
        print("I am SS1");
    }
}

class SubSystem2{
    
    func tell(){
        print("I am SS2");
    }
}

class SubSystem3{
    
    func speak(){
        print("I am SS3");
    }
}

var facade = Facade();

facade.communicate();

  代码分析:Facade是外观实现类,类中包含子系统的对象和需要被调用的功能方法communicate,此方法实际是封装了SubSystem1"、SubSystem2”、SubSystem3"相关方法的方法,在需要communicate方法的时候,不需要再逐个调用各子系统的方法,而是实例化Facade后,直接调用communicate`方法即可。以下是上面代码的输出结果:

I am SS1
I am SS2
I am SS3

  总结:外观模式是一个能打包小功能为大功能的设计模式,这样设计,既能是子系统分工明确,也能在调用的时候让Coder省去不少麻烦,也让代码结构变得清晰,而在受欢迎的Laravel框架中更是大量使用了这种设计模式。


lZackx © 2022. All rights reserved.

Powered by Hydejack v9.1.6