JAVA设计模式——外观模式
2012-09-20 17:54
429 查看
外观模式
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
设计原则:“最少知识”原则(Least Knowledge)——就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
1)该对象本身;
2)被当做方法的参数而传递进来的对象;
3)此方法所创建或实例化的任何对象;
4)对象的任何组件。
具体例子
外观更简洁的类:HomeThreaterFacade.java
测试类:Test.java
外观模式与适配器模式的比较
1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器;
2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观;
3)适配器改变接口以符合客户的期望;
4)外观将客户从一个复杂的子系统中解耦;
5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定;
6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行;
7)适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承;
8)可以为一个子系统实现一个以上的外观;
9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
设计原则:“最少知识”原则(Least Knowledge)——就任何对象而言,在该对象的方法内,我们只应该调用属于以下范围的方法:
1)该对象本身;
2)被当做方法的参数而传递进来的对象;
3)此方法所创建或实例化的任何对象;
4)对象的任何组件。
具体例子
外观更简洁的类:HomeThreaterFacade.java
package com.designpattern.facade; public class HomeThreaterFacade { Amplifier amp; Tuner tuner; DvdPlayer dvd; CdPlayer cd; Projector projector; ThreaterLights lights; Screen screen; PopcornPopper popper; public HomeThreaterFacade(Amplifier amp, Tuner tuner, DvdPlayer dvd, CdPlayer cd, Projector projector, Screen screen, ThreaterLights lights, PopcornPopper popper){ this.amp = amp; this.tuner = tuner; this.dvd = dvd; this.cd = cd; this.projector = projector; this.lights = lights; this.screen = screen; this.popper = popper; } public void watchMovie(String movie){ System.out.println("Get ready to watch a movie..."); popper.on(); popper.pop(); lights.dim(10); screen.down(); projector.on(); projector.wideScreenMode(); amp.on(); amp.setDvd(); amp.setSurroundSound(); amp.setVolume(5); dvd.on(); dvd.play(movie); } public void endMovie(){ System.out.println("Shutting movie threater down..."); popper.off(); lights.on(); screen.up(); projector.off(); amp.off(); dvd.stop(); dvd.eject(); dvd.off(); } }
测试类:Test.java
package com.designpattern.facade; public class Test { public static void main(String[] args) { Amplifier amp = new Amplifier(); Tuner tuner = new Tuner(); DvdPlayer dvd = new DvdPlayer(); CdPlayer cd = new CdPlayer(); Projector projector = new Projector(); Screen screen = new Screen(); ThreaterLights lights = new ThreaterLights(); PopcornPopper popper = new PopcornPopper(); HomeThreaterFacade homeThreater = new HomeThreaterFacade(amp, tuner, dvd, cd, projector, screen, lights, popper); homeThreater.watchMovie("Raiders of the Lost Ark"); homeThreater.endMovie(); } }
外观模式与适配器模式的比较
1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器;
2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观;
3)适配器改变接口以符合客户的期望;
4)外观将客户从一个复杂的子系统中解耦;
5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定;
6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行;
7)适配器模式有两种形式:对象适配器和类适配器。类适配器需要用到多重继承;
8)可以为一个子系统实现一个以上的外观;
9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
相关文章推荐
- JAVA设计模式-25-外观模式
- 设计模式之第7章-外观模式(Java实现)
- Java与设计模式(二十)结构型--外观模式
- java设计模式之外观模式
- Java设计模式----外观模式(Facade)
- Java23种设计模式——外观模式
- java设计模式--外观模式
- Java设计模式_(结构型)_外观模式
- java设计模式之外观模式
- JAVA设计模式之门面模式(外观模式)
- Java设计模式——外观模式
- Java实现设计模式之外观模式
- Java设计模式---外观模式
- Java设计模式_结构型_外观模式_病人去医院看病
- 23种java设计模式之外观模式
- 设计模式(十)----- 外观模式(Facade)----(JAVA版)
- java设计模式----外观模式
- JAVA 设计模式 外观模式
- java 23种常用设计模式之外观模式(Facade)
- java_设计模式_外观模式_Facade Pattern(2016-08-09)