设计模式之“外观模式(门面模式)(Facade)”
作者:互联网
一.外观模式
1.概念
- 为子系统中的一组接口提供一个一致的界面
- 此模式定义了一个高层接口
- 这个接口使得这一子系统更加容易使用
- 他完美的体现了依赖倒转原则和迪米特法则的思想,是常用模式之一
2.何时使用
-
首先在设计初期阶段,应该要有意识的将不同的两个层分离(如:经典的三层架构)
- 经典的三层架构
-
就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与逻辑层之间建立外观模式(Facade)
- 这样可以为复杂的子系统提供一个简单的接口,使得耦合性大大降低
-
- 经典的三层架构
-
其次,在开发阶段,子系统往往因为不断的重构演化而变得原来越复杂
- 大多数的模式使用时也都会残生很多很小的类
- 会给外部调用他们的用户程序带来了使用上的困难
-
增加外观Facade类,可以提供一个简单的接口,减少他们之间的依赖
-
再则,维护一个遗留的大型系统时,可能这个系统已经非常难维护和扩展了
- 因为它包含非常重要的功能,新的需求开发必须要依赖于它。
- 此时用外观模式Facade也非常适合
-
你可以为新系统开发一个外观Facade类
-
来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口
-
让新系统与Facade对象交互,Facade与遗留代码交换所有复杂的工作
二.结构图
三.案例
1.测试类
package com.facadePatterns.facade; /** * 测试外观模板 * * @author 王子威 * @date 2022/9/15 */ public class TestFacade { public static void main(String[] args) { // 生成外观类 Facade facade = new Facade(); // 外观模板A facade.mathodA(); } }
2.外观类
package com.facadePatterns.facade; /** * 外观类【外观模板】 * * @author 王子威 * @date 2022/9/15 */ public class Facade { SubSystemOne subSystemOne; SubSystemTwo subSystemTwo; SubSystemThree subSystemThree; SubSystemFour subSystemFour; /** * 初始化各个子系统类 */ public Facade() { this.subSystemOne = new SubSystemOne(); this.subSystemTwo = new SubSystemTwo(); this.subSystemThree = new SubSystemThree(); this.subSystemFour = new SubSystemFour(); } /** * 外观模板A */ public void mathodA() { subSystemOne.methodOne(); subSystemTwo.methodTwo(); subSystemThree.methodThree(); subSystemFour.methodFour(); } }
3.子系统一
package com.facadePatterns.facade; /** * 子系统类一 * * @author 王子威 * @date 2022/9/15 */ public class SubSystemOne { public void methodOne() { System.out.println("子系统类一方法一"); } }
4.子系统二
package com.facadePatterns.facade; /** * 子系统类二 * * @author 王子威 * @date 2022/9/15 */ public class SubSystemTwo { public void methodTwo() { System.out.println("子系统类二方法二"); } }
5.子系统三
package com.facadePatterns.facade; /** * 子系统类三 * * @author 王子威 * @date 2022/9/15 */ public class SubSystemThree { public void methodThree() { System.out.println("子系统类三方法三"); } }
6.子系统四
package com.facadePatterns.facade; /** * 子系统类四 * * @author 王子威 * @date 2022/9/15 */ public class SubSystemFour { public void methodFour() { System.out.println("子系统类四方法四"); } }
7.结果图
标签:外观,void,模式,public,facade,Facade,设计模式,子系统 来源: https://www.cnblogs.com/saoge/p/16697472.html