设计模式 - 外观模式
什么是外观模式?
定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。通过创建一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以通过调用外观类的方法来调用内部子系统中所有方法
解决问题
● 避免了系统与系统之间的高耦合度
● 使得复杂的子系统用法变得简单
结构图
注意点
从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Façade接口的变化。
Façade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Façade很多时候更是一种架构设计模式。
Façade设计模式并非一个集装箱,可以任意地放进任何多个对象。Façade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合。
注意区分Façade模式、Adapter模式、Bridge模式与Decorator模式。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。
代码
● 背景:小成的爷爷已经80岁了,一个人在家生活:每次都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;
● 冲突:行动不方便,走过去关闭那么多电器很麻烦,代码如下:
//灯类public class SubSystemA_Light{public void on(){Console.WriteLine("打开了灯....");}public void off(){Console.WriteLine("关闭了灯....");}}//电视类public class SubSystemB_Television{public void on(){Console.WriteLine("打开了电视....");}public void off(){Console.WriteLine("关闭了电视....");}}//空调类public class SubSystemC_Aircondition{public void on(){Console.WriteLine("打开了空调....");}public void off(){Console.WriteLine("关闭了空调....");}}public class Facade{SubSystemA_Light light;SubSystemB_Television television;SubSystemC_Aircondition aircondition;//传参public Facade(SubSystemA_Light light, SubSystemB_Television television, SubSystemC_Aircondition aircondition){this.light = light;this.television = television;this.aircondition = aircondition;}//起床后一键开电器public void on(){Console.WriteLine("起床了");light.on();television.on();aircondition.on();}public void off(){//睡觉时一键关电器Console.WriteLine("睡觉了");light.off();television.off();aircondition.off();}public static void Main(String[] args){{//实例化电器类SubSystemA_Light light = new SubSystemA_Light();SubSystemB_Television television = new SubSystemB_Television();SubSystemC_Aircondition aircondition = new SubSystemC_Aircondition();//传参Facade facade = new Facade(light, television, aircondition);//客户端直接与外观对象进行交互facade.on();Console.WriteLine("可以看电视了");facade.off();Console.WriteLine("可以睡觉了");}
设计模式 - 外观模式相关推荐
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- 设计模式--------外观模式
设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...
- [设计模式]外观模式
1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...
- Java设计模式---外观模式
外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...
- Java 设计模式——外观模式
概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...
- Java设计模式-外观模式
我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦
- 大话设计模式—外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- 设计模式 外观模式 一键电影模式
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...
- 8. 设计模式 外观模式 一键电影模式
这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...
- 大话设计模式——外观模式
股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...
最新文章
- 将Centos的yum源更换为国内的阿里云源
- sw运行很卡怎么办_windows10系统SolidWorks运行速度很慢如何解决
- eclipse中maven的user settings和global settings的区别
- Chrome上出现的问题
- 文治者必有武备不然长大了挨欺负_2017届高考语文全国卷文言文专题阅读15篇(附答案)...
- php_memcahed telnet远程操作方法
- 2016下半年网络规划设计师考试上午真题
- mvn创建flink项目
- python学习笔记8-列表、集合、字典推导式
- 土豆视频ipad 5.0 客户端
- java yyyymmdd 的date_用Java解析YYYYMMdd日期的最快方法
- 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
- 阿里巴巴中台战略思想与架构实战笔记
- 计算机科学与技术反思录
- math.hypot java_java.lang.Math.hypot(double x, double y)方法实例
- 软件构造LAB1的一些思考
- c语言二级程序设计题难吗,c语言二级公共基础知识试题特点
- 4、不准用组函数(Max),取得最高薪水【bjpowernode34道SQL题】
- 管理的核心是什么?这里有一套科学、高效的团队管理法则
- 有4G还怕没宽带?智能组网神器蒲公英X4C全面体验