我对外观模式的理解
来源:互联网 发布:一楼土木人淘宝网 编辑:程序博客网 时间:2024/05/18 00:33
一.概念
外观模式外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
二.设计原则
7.最少知识原则:只和你的密友谈话。
三.举例子
现在有一个家庭影院系统,这个系统有电视机,空调,电灯等组成。每当看电影时,电视机要开启,空调要开启,电灯要关掉。当电影结束的时候,电视机要关掉,空调要关掉,电灯要开启。可想而知,这个系统肯定有这三个子系统电视机、空调和电灯组成。但每次看家庭影院的时候,都要这三个操作。这时候可以使用外观模式。
/** * 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用 * 应用场景 * 1)为一个复杂子系统提供一个简单接口。 * 2)提高子系统的独立性。 * 3)在层次化结构中,可以使用Facade模式定义系统中每一层的入口。 */public class FacadeTest {public class TV {public void turnOnTv() {System.out.println("打开电视!");}public void changeChannel() {System.out.println("打开电影频道!");}public void setVoice() {System.out.println("设置15音调");}public void turnOffTv() {System.out.println("关闭电视!");}}public class Conditioning {public void turnOnConditioning() {System.out.println("打开空调!");}public void setTemperature() {System.out.println("设置26度");}public void turnOffConditioning() {System.out.println("关闭空调!");}}public class Light {public void turnOnLight() {System.out.println("打开电灯");}public void turnOffLight() {System.out.println("关闭电灯");}}//因为是内部类,所以当内部存在静态变量时,需要改成静态内部类public static class Film {private final TV tv;private final Conditioning conditioning;private final Light light;//此处运用了饿汉式的单例模式,因为只要一个外观就可以了。private Film() {this.tv = new FacadeTest().new TV();this.conditioning = new FacadeTest().new Conditioning();this.light = new FacadeTest().new Light();}private static Film instance = new Film();public static Film getInstance() {return instance;}public void turnOnFilm() {this.tv.turnOnTv();this.tv.changeChannel();this.tv.setVoice();this.conditioning.turnOnConditioning();this.conditioning.setTemperature();this.light.turnOffLight();System.out.println("电影开始ing。。。。");}public void turnOffFilm() {this.tv.turnOffTv();this.conditioning.turnOffConditioning();this.light.turnOnLight();System.out.println("电影结束了。。。。。");}}public static void main(String[] args) {Film.getInstance().turnOnFilm();System.out.println("=============");System.out.println("正在播放电影。。。。");System.out.println("=============");Film.getInstance().turnOffFilm();}}运行结果:
四.总结
外观模式 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。然后外观类可以使用单例更好的控制外观。
更多参考
http://blog.csdn.net/hguisu/article/details/7533759
0 0
- 我对外观模式的理解
- 外观模式的简单理解
- 外观模式的简单理解
- 对外观模式的讨论
- 我对设计模式的理解(一)
- 我对设计模式的理解(二)
- 谈谈我对BS模式的理解
- 我对一些设计模式的理解
- 我对单态模式的理解
- 我对工厂模式的理解
- 我对观察者模式的理解
- 我对装饰者模式的理解
- 我对单例模式的理解
- 我对命令模式的理解
- 我对适配器模式的理解
- 我对模板方法模式的理解
- 我对设计模式的理解
- 我对mvc模式的一些理解
- 正则表达式常用验证
- 开源夏令营(5)
- RocketMQ原理解析-producer 3.如何发送顺序消息
- cocos2d-x 3.2 |飞机大战:技能
- 编译原理实验之预测分析算法的设计与实现
- 我对外观模式的理解
- Java中assert的用法
- hdu 4857 逃生(拓扑排序)
- 经典SQL语句大全
- Leetcode之 Max Points on a Line
- 开源夏令营(6)
- RocketMQ原理解析-producer 4.发送分布式事物消息
- gitbub-android-async-http框架使用
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 05.游戏界面 主角飞机的移动