什么是外观模式?

定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。通过创建一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以通过调用外观类的方法来调用内部子系统中所有方法

解决问题

● 避免了系统与系统之间的高耦合度
● 使得复杂的子系统用法变得简单

结构图

注意点

从客户程序的角度来看,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("可以睡觉了");}

设计模式 - 外观模式相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  2. 设计模式--------外观模式

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

  3. [设计模式]外观模式

    1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...

  4. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...

  5. Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  6. Java设计模式-外观模式

    我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦

  7. 大话设计模式—外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  8. 设计模式 外观模式 一键电影模式

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...

  9. 8. 设计模式 外观模式 一键电影模式

    这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...

  10. 大话设计模式——外观模式

    股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...

最新文章

  1. 将Centos的yum源更换为国内的阿里云源
  2. sw运行很卡怎么办_windows10系统SolidWorks运行速度很慢如何解决
  3. eclipse中maven的user settings和global settings的区别
  4. Chrome上出现的问题
  5. 文治者必有武备不然长大了挨欺负_2017届高考语文全国卷文言文专题阅读15篇(附答案)...
  6. php_memcahed telnet远程操作方法
  7. 2016下半年网络规划设计师考试上午真题
  8. mvn创建flink项目
  9. python学习笔记8-列表、集合、字典推导式
  10. 土豆视频ipad 5.0 客户端
  11. java yyyymmdd 的date_用Java解析YYYYMMdd日期的最快方法
  12. 中移物联网联合上研院推出快速定位服务,助力智慧物联网发展
  13. 阿里巴巴中台战略思想与架构实战笔记
  14. 计算机科学与技术反思录
  15. math.hypot java_java.lang.Math.hypot(double x, double y)方法实例
  16. 软件构造LAB1的一些思考
  17. c语言二级程序设计题难吗,c语言二级公共基础知识试题特点
  18. 4、不准用组函数(Max),取得最高薪水【bjpowernode34道SQL题】
  19. 管理的核心是什么?这里有一套科学、高效的团队管理法则
  20. 有4G还怕没宽带?智能组网神器蒲公英X4C全面体验

热门文章

  1. 【转】数据库基本知识:(七)函数和表达式的使用
  2. ECshop 每个数据库表结构说明
  3. halcon基础学习(2)—blob分析
  4. MySQL复制(一):异步复制(Asynchronous replication)
  5. DM368 NAND Flash启动揭秘
  6. c语言等号 逗号,C语言逗号运算符和逗号表达式
  7. Astra Pro - Astra主题高级插件 v3.9.0
  8. 算法导论 思考题 2-1
  9. DataReader转换DataTable
  10. 关于苹果设备唯一标示uuid