• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
逐梦年华~Apache_xiaochao
记录个人IT成长路上的点点滴滴...
博客园    首页    新随笔    联系   管理    订阅  订阅
设计模式——外观模式
外观模式定义:提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

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

    比如很多电脑都有“一键影音”功能,当按下“一键影音”键的时候,电脑需要调整音效,音量,屏幕亮度等等。这里可能会让人联想到“命令模式”,但是我们这里不关注命令的传递,而是关注具体如何执行。
    我们可以在一个具体的类中预定义一组操作(包括各个影音器件的开启功能),当这个类的某个方法被触发的时候,这些功能的开启方法都会被触发,从而就达到了简化的目的。外观展现给用户的只需要实例化这个具体的类,然后调用相应的启动方法,而无需手动开启每一个器件。
 针对这个例子的具体编码如下:
 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 }
外观模式的意图是要提供一个简单的接口,好让一个子系统更易于使用。
当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观模式。
 
posted on 2014-09-20 13:11  Apache_xiaochao  阅读(272)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3