外观模式
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
我们来看具体的代码实现:
三个子系统类:
1 package facade; 2 3 public class SubSystemOne { 4 public void methodOne() { 5 System.out.println("子系统方法一"); 6 } 7 } 8 9 public class SubSystemTwo { 10 public void methodTwo() { 11 System.out.println("子系统方法二"); 12 } 13 } 14 15 public class SubSystemThree { 16 public void methodThree() { 17 System.out.println("子系统方法三"); 18 } 19 }
门面类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class Facade { 2 private SubSystemOne systemOne; 3 private SubSystemTwo systemTwo; 4 private SubSystemThree systemThree; 5 6 public Facade(){ 7 systemOne = new SubSystemOne(); 8 systemTwo = new SubSystemTwo(); 9 systemThree = new SubSystemThree(); 10 } 11 12 public void facadeMethodOne(){ 13 systemOne.methodOne(); 14 systemThree.methodThree(); 15 } 16 17 public void facadeMethodTwo(){ 18 systemTwo.methodTwo(); 19 systemThree.methodThree(); 20 } 21 }
客户端调用:
1 public class Main { 2 public static void main(String[] args) { 3 Facade facade = new Facade(); 4 5 facade.facadeMethodOne(); 6 7 facade.facadeMethodTwo(); 8 } 9 }
我们从代码可以看出,外观模式很好的体现了依赖倒转原则和迪米特法则,是非常常用的模式之一。
那么,何时使用外观模式呢?
首先,在设计初期阶段,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要在数据访问层与业务逻辑层、业务逻辑层与表示层之间建立外观facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合度大大降低。
其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,会产生很多小的类,增加facade,可以提供简单的接口,减少他们之间的依赖。
然后,在维护一个遗留的大系统时,可能这个系统已经非常难以维护和拓展了,但因为它包含重要的接口,新的功能开发必须要依赖它,那么就可以建立facade,新系统与facade交互,facade与旧系统交互。
每天都要对自己清零,每天都要进步,哪怕只有一点点