外观模式
优点:
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 }
个人学习笔记,记录日常学习,便于查阅及加深,仅为方便个人使用。