您的位置:首页 > 其它

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

2017-08-20 23:43 274 查看

前言

​ 俗话说得好,随着人类的进步,社会的发展(土土的小学生用语),家庭影院已经进入普通家庭。那么如何构建一个集中管理的家庭影院软件系统呢?注意家庭影院需要做很多有趣的事情哦,比如内含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("家庭影院已经关闭");

}
}


运行结果



总结

外观将客户从一个复杂的子系统中解耦。

实现一个外观,需要将子系统组合禁外观中,然后将工作委托给子系统执行。

适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: