文档章节

六、设计模式——外观模式

文森特梵高
 文森特梵高
发布于 2015/08/14 10:26
字数 366
阅读 71
收藏 3

一个系统对外提供功能,需要许多子系统配合。外观模式在高层系统中通过调动多个子系统的功能来完成一个功能模式。

比如,一个家庭影院看电影,需要各种设备工作才能开始。

家庭影院运行起来,提供观看功能,需要启动爆米花机、放下屏幕、开投影仪...等等

public class Popcorn {
	private static Popcorn instance = null;
	private Popcorn() {
	}
	public static Popcorn getInstance() {
		if (instance == null) {
			instance = new Popcorn();
		}
		return instance;
	}
	public void on() {
		System.out.println("Popcorn On");
	}
	public void off() {
		System.out.println("Popcorn Off");
	}
	public void pop() {
		System.out.println("Popcorn is popping");
	}
}
//其他类省略
//.....略......

public class HomeTheaterFacade {
	private TheaterLights mTheaterLights;
	private Popcorn mPopcorn;
	private Stereo mStereo;
	private Projector mProjector;
	private Screen mScreen;
	private DVDPlayer mDVDPlayer;

	public HomeTheaterFacade() {
		mTheaterLights = TheaterLights.getInstance();
		mPopcorn = Popcorn.getInstance();
		mStereo = Stereo.getInstance();
		mProjector = Projector.getInstance();
		mScreen = Screen.getInstance();
		mDVDPlayer = DVDPlayer.getInstance();
	}

	public void ready() {
		mPopcorn.on();
		mPopcorn.pop();
		mScreen.down();
		mProjector.on();
		mStereo.on();
		mDVDPlayer.on();
		mDVDPlayer.setdvd();
		mTheaterLights.dim(10);
	}

	public void end() {
		mPopcorn.off();
		mTheaterLights.bright();
		mScreen.up();
		mProjector.off();
		mStereo.off();
		
		mDVDPlayer.setdvd();
		mDVDPlayer.off();
		
	}

	public void play() {
		mDVDPlayer.play();
	}

	public void pause() {
		mDVDPlayer.pause();
	}
}

ready函数调用了众多设备的相关功能,来完成电影院的准备工作。

这样能达到系统对外界解耦的效果。



外观模式与命令模式 的 区别


外观模式是一个系统提供对外功能的简化。

命令模式是为了将功能封装成命令。



最小知道原则——你知道太多了


尽量减少对象之间的交互,为了解耦。


© 著作权归作者所有

文森特梵高
粉丝 2
博文 28
码字总数 15386
作品 0
广州
程序员
私信 提问
设计模式学习笔记十四:适配器模式、桥接模式与外观模式

1.适配器模式与桥接模式的区别和联系 适配器模式和桥接模式都是间接引用对象,因此可以使系统更灵活,在实现上都涉及从自身以外的一个接口向被引用的对象发出请求。 两种模式的区别在于使用场...

长平狐
2013/06/17
89
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
EasyToLearnDesignPattern

简单上手设计模式 GITHUB:https://github.com/Fisher-Joe/EasyToLearnDesignPattern 本文旨在使用最简单的语言,最简单的代码让人学习设计模式(最起码是我) 说明: 本文的所有内容都是基于...

芝麻开门
04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安卓Q | 文件存储沙箱化FAQ,你想知道的这里都有!

文件存储沙箱化作为Android Q最为重要的变更之一,对应用文件存储、访问、分享等操作都带来重大的影响,被众多开发者关注和讨论。本文邀请华为技术专家对开发者提到的重点问题进行了解答,以...

安卓绿色联盟
17分钟前
1
0
可以提高程序员效率的工具!

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 本文记录一下我在平时喜欢用的一些小工具,以便以后重装系统/换电脑的时候能快速安装...

Java3y
39分钟前
4
0
将博客搬至CSDN

https://blog.csdn.net/qq_38157006

Marhal
45分钟前
1
0
unicode Java中求字符串长度length()和codePointCount()的区别

在计算字符串长度时,Java的两种方法length()和codePointCount()一度让我困惑,运行书上例子得到的长度值是相等的,那为什么要设定两个方法呢? 对于普通字符串,这两种方法得到的值是一样的...

泉天下
46分钟前
2
0
uin-app 一、学习理由

选择uni-app 理由 别人的理由 1. 5+ 有HTML5+和Native.js技术,HTML5+包含常用的跨平台的几百个API,能满足常规开发需求,而Native.js把40w原生api映 射成js对象,这样js可以直接调原生。HTM...

轻轻的往前走
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部