外观模式(Facade Pattern)——随遇而安

来源:互联网 发布:安徽快三遗漏数据查询 编辑:程序博客网 时间:2024/06/06 07:28

前言

​ 俗话说得好,随着人类的进步,社会的发展(土土的小学生用语),家庭影院已经进入普通家庭。那么如何构建一个集中管理的家庭影院软件系统呢?注意家庭影院需要做很多有趣的事情哦,比如内含DVD播放器,投影仪,自动屏幕,环绕立体声等。。。

​ 当当当,外观模式闪亮登场(QAQ)。。。

概述

定义

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

​ 外观模式允许我们让客户和子系统之间避免紧耦合,而且遵循“最少知识”原则

”最少知识“原则:只和你的密友谈话。也就是说,当你正在设计一个系统,不管是任何对象,你都要注意它所交互的类有哪些,并注意它和这些类是如何交互的。

类图

这里写图片描述
Facade:外观角色

设计模式的实现

背景

​ 背景就是前言中提到的,实现家庭影院。现在,我需要实现对投影仪,空调,屏幕和灯的控制。这里我们只实现对投影仪和屏幕的控制。

代码实现

package Facade;/** * 子系统——投影仪 * Created by ChongLou on 2017/8/20. */public class Projector {    public void on() {        System.out.println("打开了投影仪。。。");    }    public void off() {        System.out.println("关闭了投影仪");    }}
package Facade;/** * 子系统——屏幕 * Created by ChongLou on 2017/8/20. */public class Screen {    public void on() {        System.out.println("打开了屏幕");    }    public void off() {        System.out.println("关闭了屏幕");    }}
package Facade;/** * 家庭影院外观 * Created by ChongLou on 2017/8/20. */public class HomeTheaterFacade {    Projector projector;    Screen screen;    public HomeTheaterFacade(Projector projector, Screen screen) {        this.projector = projector;        this.screen = screen;    }    public void on(){        projector.on();        screen.on();    }    public void off(){        screen.on();        projector.on();    }}
package Facade;/** * 客户端 * Created by ChongLou on 2017/8/20. */public class Client {    public static void main(String[] args) {        Projector projector = new Projector();        Screen screen = new Screen();        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(projector, screen);        homeTheaterFacade.on();        System.out.println("家庭影院已经打开");        homeTheaterFacade.off();        System.out.println("家庭影院已经关闭");    }}

运行结果

这里写图片描述

总结

  1. 外观将客户从一个复杂的子系统中解耦。
  2. 实现一个外观,需要将子系统组合禁外观中,然后将工作委托给子系统执行。
  3. 适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
原创粉丝点击