外观模式(Facade)

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

一、定义

外部与一个子系统的通信通过一个统一的外观角色进行,为子系统中的一组接口提供一个一致的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

 

二、结构

Facade(外观角色):在客户端可以调用这个角色的方法,在外观角色中可以知道相关的子系统的功能和责任;

在正常情况下,它将所有从客户端发来的请求委派到相应的子系统中去,传递给相应的子系统对象处理。

SubSystem(子系统角色):在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是一个类的集合,

它实现子系统的功能;子系统并不知道外观(又称为门面)的存在,对于子系统而言,外观角色仅仅是另一个客户端而已。

三、优点

对客户端屏蔽了子系统组件,减少了客户端需要处理的对象数量并且使得子系统使用起来更加容易。

实现了子系统与客户端之间松耦合。

提供了一个访问子系统的统一入口,并不影响客户端直接使用子系统。

四、缺点

使用合适的情况下没有什么问题

五、应用场景

想要为访问一系列复杂的子系统提供一个统一的简单入口

客户端与多个子系统之间存在很大的依赖性,引入外观类可以将子系统和客户端解耦

在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系

六、个人总结

1、这个模式特别容易,这也是经常被使用的一种模式,很多时候我们都在使用,只是你可能还不知道它的名字而已。

2、通过一个外观从而让访问者可以避免直接访问过多子系统的接口,可以直接通过访问外观就能达到最终的目的。

3、如果你写过J2EE的项目,很多时候我们使用service调用多个dao达到目的,从另一个角度讲,service就是一种外观。

4、与适配器模式对比:

适配器模式是把一个原来无法访问的接口,通过适配让客户端能进行访问。

外观模式原来的接口可以正常的访问,只是封装了一个更简单的接口从而方便客户端的访问。

参考博客:http://www.cnblogs.com/edisonchou/p/7124069.html

转载于:https://www.cnblogs.com/linkstar/p/7731826.html

大战设计模式【10】—— 外观模式相关推荐

  1. 移动开发 | Swift 中的设计模式 #3 外观模式与适配器模式

    本文是我的设计模式系列教程的第三篇.在第一篇文章中,我介绍了 创建型模式中的工厂模式和单例模式.在第二篇文章中,又讨论了一下 行为型模式中的观察者模式和备忘录模式. 在本文中,我会就结构型模式中的外观 ...

  2. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  3. JS常用的设计模式(7)—— 外观模式

    JS常用的设计模式(7)-- 外观模式 外观模式(门面模式),是一种相对简单而又无处不在的模式.外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用. 用一段再简单不过的代码来表示 var ...

  4. Swift 中的设计模式 #3 外观模式与适配器模式

    作者:Andrew Jaffee,原文链接,原文日期:2018-09-04 译者:郑一一:校对:BigNerdCoding,pmst,Forelax:定稿:Forelax 本文是我的设计模式系列教程的 ...

  5. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  6. [设计模式C++]外观模式

    系列文章总结一些比较常见的设计模式,外观模式是由GoF提出的23种设计模式的一种,使用非常简单. 2021-09-16 增加一个例子 区别于代理模式,都像是插入第三者,但是外观模式是统筹管理子系统,就 ...

  7. 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

    如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...

  8. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  9. java设计模式 外观,精掌握Java设计模式之外观模式(10)

    定义 通俗地解释,当你打开灯的时候,你只需要嗯一下开关就好了,不需要关心灯泡亮起来的这个流程,同理,打开电脑的时候, 嗯一下开机键就好了,也不需要关心电脑是先运行cpu还是内核之类的.这样能让用户体验 ...

  10. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. jieba分词的使用
  2. [转] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  3. SpringMVC与Ajax交互
  4. rk3399性能_AIIA AI公布首轮评估结果:瑞芯微RK3399数据抢眼
  5. Træfɪk入门教程
  6. 使用AppFabric 承载WCF和WF服务-安装和使用
  7. 8000余未受保护的开源 Redis 实例可遭任意访问
  8. 捕获javaw的输出
  9. 观史图馆之《中东列国历代疆域变化 青铜与古典时代》
  10. nodejs 点击按钮下载_从服务器下载文件使用NodeJS表达
  11. 实验十三——DD和S-MAC协议仿真实验
  12. 团队任务1:第一次团队会议
  13. 剑指offe面试题8 旋转数组的最小数字 (java实现)
  14. 笔记本电脑上的触摸板怎样关闭(神州战神)
  15. 小程序集-朋友圈集赞神器
  16. Java 数组(三)二维数组
  17. UE4 C++ 类的4种引用类型,和异步加载资产
  18. WordPress多语言翻译插件 - WPML使用教程
  19. 【系统分析师之路】系统安全章节错题集锦
  20. 让客户在微信上查看订单详情,【单据分享】让你省心又省力!

热门文章

  1. Java中单例模式的几种写法
  2. Strut2 annotation配置时action到另一个action跳转参数传递
  3. springSecurity 基于方法权限控制@RolesAllowed @Serured @PreAuthorize 与 页面端标签控制权限...
  4. CentOS7源码安装Python3
  5. EvilAP_Defender:可以警示和攻击 WIFI 热点陷阱的工具
  6. iOS,QRCord(矩阵二维码)
  7. 朴素贝叶斯在文本分类中的应用之 伯努利
  8. 面试题 -二元查找树转变成排序的双向链表
  9. 01.springboot入门和微服务简介
  10. 反射:集合泛型的本质