• 设计模式——外观模式


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

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

        比如很多电脑都有“一键影音”功能,当按下“一键影音”键的时候,电脑需要调整音效,音量,屏幕亮度等等。这里可能会让人联想到“命令模式”,但是我们这里不关注命令的传递,而是关注具体如何执行。
        我们可以在一个具体的类中预定义一组操作(包括各个影音器件的开启功能),当这个类的某个方法被触发的时候,这些功能的开启方法都会被触发,从而就达到了简化的目的。外观展现给用户的只需要实例化这个具体的类,然后调用相应的启动方法,而无需手动开启每一个器件。
     针对这个例子的具体编码如下:
     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 }
    外观模式的意图是要提供一个简单的接口,好让一个子系统更易于使用。
    当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式。
     
  • 相关阅读:
    jquery+NHibernate3.3.3+MVC的分页效果
    An exception occurred during configuration of persistence layer.
    StringHelpers
    发送带有认证信息的HTTP请求并取回响应
    script的defer和async
    location.origin兼容
    写法导致的兼容性问题
    正则表达式应用收集
    列表数字对齐布局
    轮盘赌算法
  • 原文地址:https://www.cnblogs.com/xiaochao-cs-whu/p/3983203.html
Copyright © 2020-2023  润新知