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

前言

​ 俗话说得好,随着人类的进步,社会的发展(土土的小学生用语),家庭影院已经进入普通家庭。那么如何构建一个集中管理的家庭影院软件系统呢?注意家庭影院需要做很多有趣的事情哦,比如内含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. 适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值