设计模式读书笔记之外观模式/门面模式(Facade)

门面模式:为多个子系统提供统一的高层接口,以降低客户对子系统的依赖, 减少客户使用子系统的难度.

门面模式是一个名字和描述都让人感觉很难的模式,我也曾经被它的名字吓倒过。其实门面模式很简单, 就是要把下面的左图结构变为右图结构。

 

基础代码:

[java]  view plain  copy
  1. //子系统1  
  2. package designpattern.facade;  
  3. public class SubSystem1 {  
  4.     public void method1(){  
  5.         //  
  6.     }  
  7.     public void method2(){  
  8.         //  
  9.     }  
  10.     public void method3(){  
  11.         //  
  12.     }  
  13. }  
  14. //子系统2  
  15. package designpattern.facade;  
  16. public class SubSystem2 {  
  17.     public void method1(){  
  18.         //  
  19.     }  
  20.     public void method2(){  
  21.         //  
  22.     }  
  23.     public void method3(){  
  24.         //  
  25.     }  
  26. }  
  27. //子系统3  
  28. package designpattern.facade;  
  29. public class SubSystem3 {  
  30.     public void method1(){  
  31.         //  
  32.     }  
  33.     public void method2(){  
  34.         //  
  35.     }  
  36.     public void method3(){  
  37.         //  
  38.     }  
  39. }  
  40. //门面  
  41. package designpattern.facade;  
  42. public class Facade {  
  43.     private SubSystem1 sub1;  
  44.     private SubSystem2 sub2;  
  45.     private SubSystem3 sub3;  
  46.     public Facade(SubSystem1 sub1, SubSystem2 sub2, SubSystem3 sub3){  
  47.         this.sub1 = sub1;  
  48.         this.sub2 = sub2;  
  49.         this.sub3 = sub3;  
  50.     }  
  51.     public void doThis(){  
  52.         sub1.method1();  
  53.         sub2.method1();  
  54.         sub3.method1();  
  55.     }  
  56.       
  57.     public void doThat(){  
  58.         sub2.method2();  
  59.         sub3.method3();  
  60.         //......  
  61.     }  
  62. }  
  63. //客户/上下文  
  64. package designpattern.facade;  
  65.   
  66. public class Client {  
  67.     private Facade facade;  
  68.     public Client(Facade f){  
  69.         this.facade = f;  
  70.     }  
  71.     public void doSomething(){  
  72.         facade.doThat();  
  73.         //facade.doThis();  
  74.         //.....  
  75.     }  
  76. }  

举一例: 汽车分好多子系统: 发动机, 刹车系统, 变速系统, 电子系统..... 如果司机在开车的时候要直接和这些子系统打交道, 那这个车没办法开了,因为这个难度太大. 于是于是有了驾驶室这个操作平台, 由驾驶室里面的油门, 刹车, 换档把手, 手札, 开关按钮来和这些子系统打交道. 而客户(即驾驶员)只需要坐在驾驶室里就可以操控整个车. 这个驾驶室就是这整个汽车全部系统的门面.

特点:

1 外观类持有各个子系统的引用;

2 外观类通过调用各个子系统的功能来为用户提供高层接口.

 

适应场景: 子系统比较多而且复杂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值