外观模式

外观模式

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

设计原则:“最少知识”原则(Least Knowledge)——就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:

1)该对象本身;

2)被当做方法的参数而传递进来的对象;

3)此方法所创建或实例化的任何对象;

4)对象的任何组件。

     

        具体例子

外观更简洁的类:HomeThreaterFacade.java

[java]  view plain copy
  1. package com.designpattern.facade;  
  2.   
  3. public class HomeThreaterFacade {  
  4.     Amplifier amp;  
  5.     Tuner tuner;  
  6.     DvdPlayer dvd;  
  7.     CdPlayer cd;  
  8.     Projector projector;  
  9.     ThreaterLights lights;  
  10.     Screen screen;  
  11.     PopcornPopper popper;  
  12.       
  13.     public HomeThreaterFacade(Amplifier amp,   
  14.                               Tuner tuner,  
  15.                               DvdPlayer dvd,  
  16.                               CdPlayer cd,  
  17.                               Projector projector,  
  18.                               Screen screen,  
  19.                               ThreaterLights lights,  
  20.                               PopcornPopper popper){  
  21.         this.amp = amp;  
  22.         this.tuner = tuner;  
  23.         this.dvd = dvd;  
  24.         this.cd = cd;  
  25.         this.projector = projector;  
  26.         this.lights = lights;  
  27.         this.screen = screen;  
  28.         this.popper = popper;  
  29.     }  
  30.       
  31.     public void watchMovie(String movie){  
  32.         System.out.println("Get ready to watch a movie...");  
  33.         popper.on();  
  34.         popper.pop();  
  35.         lights.dim(10);  
  36.         screen.down();  
  37.         projector.on();  
  38.         projector.wideScreenMode();  
  39.         amp.on();  
  40.         amp.setDvd();  
  41.         amp.setSurroundSound();  
  42.         amp.setVolume(5);  
  43.         dvd.on();  
  44.         dvd.play(movie);  
  45.     }  
  46.       
  47.     public void endMovie(){  
  48.         System.out.println("Shutting movie threater down...");  
  49.         popper.off();  
  50.         lights.on();  
  51.         screen.up();  
  52.         projector.off();  
  53.         amp.off();  
  54.         dvd.stop();  
  55.         dvd.eject();  
  56.         dvd.off();  
  57.     }  
  58. }  

测试类:Test.java

[java]  view plain copy
  1. package com.designpattern.facade;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         Amplifier amp = new Amplifier();  
  6.         Tuner tuner = new Tuner();  
  7.         DvdPlayer dvd = new DvdPlayer();  
  8.         CdPlayer cd = new CdPlayer();  
  9.         Projector projector = new Projector();  
  10.         Screen screen = new Screen();  
  11.         ThreaterLights lights = new ThreaterLights();  
  12.         PopcornPopper popper = new PopcornPopper();  
  13.           
  14.         HomeThreaterFacade homeThreater = new HomeThreaterFacade(amp, tuner, dvd, cd,   
  15.                 projector, screen, lights, popper);  
  16.           
  17.         homeThreater.watchMovie("Raiders of the Lost Ark");  
  18.         homeThreater.endMovie();  
  19.     }  
  20. }  

          外观模式与适配器模式的比较

1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器;

2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观;

3)适配器改变接口以符合客户的期望;

4)外观将客户从一个复杂的子系统中解耦;

5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定;

6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行;

7)适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承;

8)可以为一个子系统实现一个以上的外观;

9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值