首页 > 代码库 > 设计模式——外观模式
设计模式——外观模式
外观模式定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
外观模式可以用来简化接口,之所以称其为“外观”,是因为一般外观是用来展现给用户的,所以一般外观都做得比较简单时尚,用来隐藏后面复杂的逻辑。
比如很多电脑都有“一键影音”功能,当按下“一键影音”键的时候,电脑需要调整音效,音量,屏幕亮度等等。这里可能会让人联想到“命令模式”,但是我们这里不关注命令的传递,而是关注具体如何执行。
我们可以在一个具体的类中预定义一组操作(包括各个影音器件的开启功能),当这个类的某个方法被触发的时候,这些功能的开启方法都会被触发,从而就达到了简化的目的。外观展现给用户的只需要实例化这个具体的类,然后调用相应的启动方法,而无需手动开启每一个器件。
针对这个例子的具体编码如下:
1 /** 2 * 声音接口 3 * @author Apache_xiaochao 4 * 5 */ 6 public interface Voice { 7 8 /** 9 * 开启声音10 */11 void on();12 /**13 * 关闭声音14 */15 void off();16 17 }
1 /** 2 * 屏幕接口 3 * @author Apache_xiaochao 4 * 5 */ 6 public interface Screen { 7 8 /** 9 * 调亮屏幕10 */11 void dodge();12 /**13 * 调暗屏幕14 */15 void dimming();16 17 }
/** * 电脑声音类 * @author Apache_xiaochao * */public class PCVoice implements Voice { @Override public void on() { System.out.println("开启声音!"); } @Override public void off() { System.out.println("关闭声音!"); }}
/** * 电脑屏幕类 * @author Apache_xiaochao * */public class PCScreen implements Screen { @Override public void dodge() { System.out.println("亮度增加!"); } @Override public void dimming() { System.out.println("亮度降低!"); }}
上面是一些基础类,下面是外观模式的主角:
1 /** 2 * 一键影音 3 * 4 * @author Apache_xiaochao 5 * 6 */ 7 public class OnekeyTheater { 8 9 private Voice voice;10 private Screen screen;11 12 public OnekeyTheater(Voice voice, Screen screen) {13 super();14 this.voice = voice;15 this.screen = screen;16 }17 18 /**19 * 开启一键影音功能20 */21 public void start() {22 voice.on();23 screen.dodge();24 }25 26 /**27 * 关闭一键影音功能28 */29 public void close() {30 voice.off();31 screen.dimming();32 }33 34 }
1 public class Driver { 2 3 public static void main(String[] args) { 4 Voice voice = new PCVoice(); 5 Screen screen = new PCScreen(); 6 OnekeyTheater onekeyTheater = new OnekeyTheater(voice, screen); 7 onekeyTheater.start(); //在这里可以进行一键操作,同时触发多个设备 8 onekeyTheater.close(); //在这里可以进行一键操作,同时关闭多个设备 9 }10 11 }
外观模式的意图是要提供一个简单的接口,好让一个子系统更易于使用。
当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式。
设计模式——外观模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。