前几天嗓子不舒服,去校医院买药。

到校医院,看挂号那没开门(里面有人的),就直接到取药的地方去拿药。谁知人家就是不给拿。无奈之下

只好去挂号那,A说明要来一盒西瓜霜,然后又跑过去拿药,我给钱人家说不行,这边不管收费,B到收费室去吧。(汗~),只好又去收费室,把钱给了,C然后又拿着盖好章的药单过去,这才拿到药。我想亏着我不是急诊,要是急诊也这么着,还真得把人给急死。

下面用图形来描述整件事:

然后再通过vb.net再讲故事讲一遍:

Module FacadeDemo2 Sub Main() '我去买西瓜霜 '让我先挂号,说明要什么药 Dim R As New Regedit R.GetDragName() '然后又到收费室缴费 Dim PF As New PayFor PF.Pay() '最后拿到西瓜霜 Dim GD As New GetDrag GD.GetaDrag() Console.WriteLine("哎,取个药真是烦死了。。。。") Console.ReadKey() End Sub End Module '挂号类 Public Class Regedit Public Sub GetDragName() Console.WriteLine("给我来一盒西瓜霜。。。。") End Sub End Class '缴费类 Public Class PayFor Public Sub Pay() Console.WriteLine("给你钱,三块一。。。。。。") End Sub End Class Public Class GetDrag Public Sub GetaDrag() Console.WriteLine("好了,我拿药走人了。。。。。") End Sub End Class

通过这么一折腾,心情很不好,我不就是拿个药吗,给钱,拿药,走人,不就得了吗?干嘛这么麻烦。刚好今天有深一步理解了外观模式,我就充当依次校领导,把这个校医院给整治一下。且看好了……

我在门口单独再来这么一个不门叫做“外观部门”,来得客户想要买药,把钱给她,一会她经过一系列工作,把药拿回来。多简单的事,这样又不会破坏原来的那些流程,又减少了客户的麻烦。那么我来试试这个效果怎么样。

先看图:

再通过图来将故事,表现形式为vb.net代码:

Module FacadeDemo2 Sub Main() '我去买西瓜霜,把钱给外观MM Dim FMM As New FacadeMM FMM.GetMoney() FMM.GiveDrag() Console.WriteLine("恩,还不错,还能欣赏风景。。。。") Console.ReadKey() End Sub End Module '外观部门 Public Class FacadeMM '定义相关类 Dim R As New Regedit Dim PF As New PayFor Dim GD As New GetDrag Public Sub GetMoney() 'MM收钱 Console.WriteLine("MM说:把钱给我。。。。") End Sub Public Sub GiveDrag() R.GetDragName() PF.Pay() GD.GetaDrag() Console.WriteLine("嘿,给你的药。。。。。") End Sub End Class '挂号类 Public Class Regedit Public Sub GetDragName() Console.WriteLine("。。。来一盒西瓜霜。。。。") End Sub End Class '缴费类 Public Class PayFor Public Sub Pay() Console.WriteLine("。。。钱,三块一。。。。。。") End Sub End Class Public Class GetDrag Public Sub GetaDrag() Console.WriteLine("。。。拿药 。。。。。。。") End Sub End Class

这样一来,又欣赏了风景又拿了药,病好的也就快了。不过作为“校领导”的我,还是得要求工作效率再提高些的。(ok.It’s the time to get up. )

最后再来看一下具体的定义以及使用范围:

外观模式(Facade ),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。(GoF )

那么什么时候可以使用这个模式呢 ?

( 大话设计模式 ) 说:

何时使用外观模式:

分三个阶段来说,

首先在设计初期阶段 ,应该要有意识的将不同的两个层分离。比如经典的三层架构 ,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间建立外观 Façade ,则这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。

其次,在开发阶段 ,子系统往往因为不断地重构演化而变得越来越复杂 ,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观 Façade 可以提供一个简单的接口,减少它们之间的依赖。

第三,在维护一个遗留的大型系统时 ,可能这个系统已经非常难以维护和扩展了 ,但因为它包含非常重要的功能,新的需求发开必须要依赖它。此时用外观模式 Façade 也是非常合适的。你可以为新系统开发一个外观 Façade 类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与 Façade 对象交互, Façade 与遗留代码交互所有复杂额工作。

通过我买西瓜霜来看外观模式(vb.net实现)相关推荐

  1. 用回拨卡打电话来看代理模式+vb.net实现

    前段时间为了打电话便宜,跑去买了个回拨卡.刚好现在有学习设计模式,对应到那个模式呢? 先说回拨卡工作原理:原先我是直接打电话给对方.现在呢,我要先把电话打到回拨卡那边的号上,然后在通过回拨卡打到对方手 ...

  2. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  3. (原创)我眼中的设计模式系列之外观模式(二)

    外观模式的基本概念 首先,我们要先了解一下外观模式的基本概念.那到底什么是外观模式?其实就是基于很多模块或者很多子系统提供的一个最高层的接口,控制客户端访问我们的应用程序,减少客户端直接对内部应用程序 ...

  4. 设计模式GOF23之-------------------结构型模式(适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式)

    一 结构型模式 二 适配器模式 下面我将用代码模拟键盘usb接口和ps/2的转接器 的适配器过程: 首先定义客户需求: package GOF23;public interface Target {v ...

  5. Java设计模式(四):结构性模式(适配器模式、桥接模式、装饰模式、组合模式、外观模式、亨元模式、代理模式)

    目录 一· 适配器设计模式 1.1 现实生活中的适配器例子 1.2 基本介绍 1.3 工作原理 1.4 类适配器模式 1.5 对象适配器模式 1.6 接口适配器模式 1.7 适配器模式在 Spring ...

  6. 图解Java设计模式学习笔记——结构型模式(适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式)

    一.适配器模式(类适配器.对象适配器.接口适配器) 1.现实生活中的例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了国内的电器了. 2.基本介绍 适配器模式(Ad ...

  7. 【设计模式_青春版】结构型|外观模式

    文章目录 外观模式(结构型) 外观模式又名门面模式 结构 外观模式案例 代码实现 优缺点 优点 缺点 使用场景 在tomcat中的 外观模式(结构型) 外观模式又名门面模式 是一种通过为多个复杂的子系 ...

  8. 6-设计模式之结构型模式(桥接模式、外观模式、组合模式、享元模式)

    设计模式之结构型模式二(桥接模式.外观模式.组合模式.享元模式) 5.4 桥接模式 5.4.1 概述 5.4.2 结构 5.4.3 案例 5.4.4 使用场景 5.5 外观模式 5.5.1 概述 5. ...

  9. 外观模式 - 设计模式学习

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 怎么叫更加容易使用呢?多个方法变成一个方法,在外观看来,只需知道这个功 ...

最新文章

  1. Python中的split,rsplit,splitlines
  2. kafka消费的三种模式_快速认识Kafka
  3. github 提交报403 forbidden的错误解决
  4. r k-means 分类结果_机器学习-Kmeans均值聚类算法(贪心学院)
  5. 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
  6. 测试配置yum仓库的http镜像
  7. 物联网正在面临的 9 大安全挑战!
  8. EDUCoder编程练习题解(一维数组和二维数组)
  9. 精读《如何在 nodejs 使用环境变量》
  10. 前端开发必备,【项目实战】
  11. 免费电子书籍--网址
  12. Google浏览器清除缓存快捷键
  13. (中英)作文 —— 标题与小标题
  14. 情景式领导力学习(2) - 实践案例及思考
  15. 一步步使用SpringBoot结合Vue实现登录和用户管理功能
  16. Java------IO流之文件专属流
  17. 触摸屏的技术类型有那些?
  18. react实现九宫格抽奖 - h5
  19. Code Project精彩系列(转)
  20. java调第三方接口

热门文章

  1. iPhone连接电脑WIN7不显示Apple iPhone便携式设备的解决办法
  2. iOS 自动布局报错:Unable to simultaneously satisfy constraints.
  3. MathorCup大数据竞赛-北京移动用户体验影响因素问题思考
  4. for循环(循环结构)
  5. 止盈快回撤小但容易错过行情,怎样处理才能恰到好处?
  6. 我为什么劝你不要过度纠结于技术细节?
  7. CandidateScorer
  8. RIL.java【2】
  9. CCS使用教程07:曲线图形显示工具
  10. SDKS企业级区块链应用平台