package facade; /** * @author jiq * 类型:Structural * 定义:外观模式(Facade)提供一个统一的接口,用来访问子系统中的一群接口。外观 * 定义了一个高层接口,使得子系统更容易使用。 * * OO原则:最少知识原则 --- 只和你的密友交谈。 * * 区别: 装饰器模式包装一个对象,并提供额外的行为。 * 适配器模式包装一个对象,并转换成不同的接口(接口改变)。 * 外观模式包装许多对象,以简化他们的接口(接口改变)。 * 代理模式包装一个对象,并控制它的访问(不改变被代理对象的接口)。 */ //屏幕 class Screen { String description; public Screen(String description) { this.description = description; } public void up() { /*...*/ } public void down() { /*...*/ } } //DVD播放器 class DvdPlayer { String description; int currentTrack; Projector projector; String title; public DvdPlayer(String description, Projector projector) { this.description = description; this.projector = projector; } public void on() { /*...*/ } public void off() { /*...*/ } public void eject() { /*...*/ } public void play(String title) { /*...*/ } public void stop() { /*...*/ } public void pause() { /*...*/ } } //投影仪 class Projector { String description; DvdPlayer cd; public Projector(String description) { this.description = description; } public void on() { /*...*/ } public void off() { /*...*/ } public void setStereoSound() { /*...*/ } public void setSurroundSound() { /*...*/ } public void setVolume(int level) { /*...*/ } public void setCd(DvdPlayer cd) { /*...*/ } } //家庭影院(外观) class HomeTheaterFacade { Projector projector; DvdPlayer cd; Screen screen; public HomeTheaterFacade(Projector amp,DvdPlayer cd,Screen screen) { this.projector = amp; this.cd = cd; this.screen = screen; } //开始看电影(将一群接口封装为一个简洁的接口) public void watchMovie(String movie) { System.out.println("Get ready to watch a movie..."); screen.down(); projector.on(); projector.setSurroundSound(); projector.setVolume(5); } //结束看电影(将一群接口封装为一个简洁的接口) public void endMovie() { System.out.println("Shutting movie theater down..."); screen.up(); projector.off(); } } public class FacadeTest { public static void main(String[] args) { Projector projector = new Projector("Top-O-Line Amplifier"); DvdPlayer cd = new DvdPlayer("Top-O-Line CD Player",projector); Screen screen = new Screen("Theater Screen"); HomeTheaterFacade homeTheater = new HomeTheaterFacade(projector,cd,screen); homeTheater.watchMovie("Raiders of the Lost Ark"); homeTheater.endMovie(); } }