定义:
门面模式也叫做外观模式,是一种常用的封装模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
角色分类:
- Facade门面角色:客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去,也就说该角色没有实际的业务逻辑,只是一个委托类。
- subsystem子系统角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。对于子系统而言,门面仅仅是另外一个客户端而已。
实现分类:
/**
* 外观模式
*/
public class ClassA {
//业务处理
public void doSomethingA(){
}
}
/**
* 外观模式
*/
public class ClassB {
//业务处理
public void doSomethingB(){
}
}
/**
* 外观模式
*/
public class ClassC {
//业务处理
public void doSomethingC(){
}
}
/**
* 门面面试
*/
public class Facade {
//被委托的对象A
private ClassA classA = new ClassA();
//被委托的对象B
private ClassB classB = new ClassB();
//被委托的对象C
private ClassC classC = new ClassC();
//提供被外部访问的方法A
public void mehtodA(){
this.classA.doSomethingA();
}
//提供被外部访问的方法B
public void mehtodB(){
this.classB.doSomethingB();
}
//提供被外部访问的方法C
public void mehtodC(){
this.classC.doSomethingC();
}
}
总结:
门面模式是用来隐藏底层系统的实现,提供一个易用简单,更高层的接口,有点类似封装、抽象的思想。在接口设计过程中,接口的粒度有时候很难掌握,粒度过大,接口的复用性会降低,太小随着调用数量增加变得不易用。接口设计通常是在复用性和易用性间权衡,接口的复用性是基本条件,但是同时,通过门面模式提供一个简单易用的接口处理特殊的场景也是一个不错的办法。
优点:
- 减少系统的相互依赖,提高了灵活性,为一个复杂的模块或子系统提供一个供外界访问的简单易用的接口
- 减少系统简单的调用次数,减少网络通信成本
- 提高安全性,访问子系统只能门面,预防低水平人员带来的风险扩散
摘自《设计模式之禅》秦小波著