首页 > 代码库 > 设计模式——外观模式

设计模式——外观模式

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

    外观模式可以用来简化接口,之所以称其为“外观”,是因为一般外观是用来展现给用户的,所以一般外观都做得比较简单时尚,用来隐藏后面复杂的逻辑。

    比如很多电脑都有“一键影音”功能,当按下“一键影音”键的时候,电脑需要调整音效,音量,屏幕亮度等等。这里可能会让人联想到“命令模式”,但是我们这里不关注命令的传递,而是关注具体如何执行。
    我们可以在一个具体的类中预定义一组操作(包括各个影音器件的开启功能),当这个类的某个方法被触发的时候,这些功能的开启方法都会被触发,从而就达到了简化的目的。外观展现给用户的只需要实例化这个具体的类,然后调用相应的启动方法,而无需手动开启每一个器件。
 针对这个例子的具体编码如下:
 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 }
外观模式的意图是要提供一个简单的接口,好让一个子系统更易于使用。
当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式。
 

设计模式——外观模式