外观模式

优点:

1.他对客户端屏蔽了子系统的组件,减少了客户端所需处理的对象数组,并使子系统使用更加容易,通过引入外观类客户端代码将变得很简答,与之关联的对象也很少  

2.他实现了子系统和客户端之间的松耦合关系,这使得子系统的内部变化不会影响到调用他的客户端,只需调整它的外观类即可    

3.一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化不会影响其他外观对象

缺点:

1.不能很好的限制客户端直接使用子系统,如果对客户端子系统作太多的限制则减少了可变性和灵活性    

2.如果设计不当,增加新的子系统可能需要修改外观类的源代码,这就违背了开闭原则     

使用环境:

1.当要为访问一些列复杂的子系统提供一个简单入口是,可以使用外观模式  

 2.客户端程序与子系统之间存在很大的依赖性,引入外观类可将子系统子系统与客户端解耦,从而提高了子系统的独立性和可移植性    

3.在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度

1 package com.shanghai.wanson.designpattern;
2 
3 public class subSystem01 {
4     public void methon1(){
5         System.out.println("子系统01方法被调用");
6     }
7 }
1 package com.shanghai.wanson.designpattern;
2 
3 public class subSystem02 {
4     public void methon2(){
5         System.out.println("子系统02方法被调用");
6     }
7 }
1 package com.shanghai.wanson.designpattern;
2 
3 public class subSystem03 {
4     public void methon3(){
5         System.out.println("子系统03方法被调用");
6     }
7 }
 1 package com.shanghai.wanson.designpattern;
 2 
 3 public class Facade {
 4     private subSystem01 system01=new subSystem01();
 5     private subSystem02 system02=new subSystem02();
 6     private  subSystem03 system03=new subSystem03();
 7 
 8     public void method(){
 9         system01.methon1();
10         system02.methon2();
11         system03.methon3();
12     }
13 }
1 package com.shanghai.wanson.designpattern;
2 
3 public class Driver {
4     public static void main(String[] args) {
5         Facade facade =new Facade();
6         facade.method();
7     }
8 }
原文地址:https://www.cnblogs.com/wq-9/p/10256988.html