外观模式:设计模式系列(十一)
in Archived / Pattern
外观模式(Facade Pattern):是一个可以通过统一对象调用子系统对象的设计模式,归类为结构型模式。
这一模式的解读分为以下几个方面:
- 有很多子系统对象在一个功能中需要被调用。
- 外观实现类可以统一调用这些需要的子系统功能。
使用外观模式的思考过程如下:
- 有一个功能方法需要调用很多子系统相关的方法。
- 直接在调用处写下一堆子系统方法需要查阅很多接口。
- 使用一个外观实现类,对这个功能方法进行封装,需要此功能的时候,直接调用一个方法就可以了。
明确一下结构,外观模式结构包括一些子系统实现类、外观实现类。
外观模式示例代码如下(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框架中更是大量使用了这种设计模式。