来源:《设计模式之禅》java
定义:门面模式也叫外观模式,要求一个子系统的外部与其内部通讯必须经过一个统一的对象进行。也就是提供一个访问子系统的接口,除了这个接口不容许任何有任何访问子系统的行为发生。设计模式
门面模式角色:安全
facade 门面角色:客户端调用这个角色访问子系统。设计
subsystem 子系统角色: code
类图:对象
代码:接口
子系统对象io
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系统对象 */ public class ClazzA { public void option() { System.out.println("###ClazzA.option..."); } }
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系统对象 */ public class ClazzB { public void option() { System.out.println("###ClazzB.option..."); } }
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系统对象 */ public class ClazzC { public void option() { System.out.println("###ClazzC.option..."); } }
门面对象:class
/** * */ package cc.rico.pattern.facade; /** * @author rico * 门面对象 */ public class Facade { ClazzA clazzA = new ClazzA(); ClazzB clazzB = new ClazzB(); ClazzC clazzC = new ClazzC(); public void optionA() { clazzA.option(); } public void optionB() { clazzB.option(); } public void optionC() { clazzC.option(); } }
场景类:扩展
/** * */ package cc.rico.pattern.facade; /** * @author rico * 场景类 */ public class Client { /** * @param args */ public static void main(String[] args) { Facade facade = new Facade(); facade.optionA(); //facade.optionB(); //facade.optionC(); } }
门面模式优势:
减小系统的互相依赖。依赖转换为对门面对象的依赖,与子系统无关。
提升灵活性。减小依赖,提升灵活。
提升安全性。只能访问门面对象暴露的访问接口。
门面模式缺点:
不符合开闭原则,对修改关闭,对扩展开放,门面对象出现问题,只能对门面对象进行修改。
使用场景:
为一个复杂的模块或子系统提供一个供外部访问的接口。
子系统相对独立,外界对子系统的访问只须要黑箱操做便可。
预防低水平开放人员误操做。
注意事项:
一个子系统能够有多个门面,
门面太庞大,根据功能划分门面
子系统提供不一样的访问路径。
门面不参与子系统的业务逻辑,新建一个封装类,将这个封装类传递给门面对象。
扩展: