外观模式就类似于一个工具包,一个类对应一个功能。

外观模式的意图是为子系统提供一个接口,便于它的使用。

书中给出的例子是画一个哑弹的飞行路径, 初始的类的设计是这样的,看下图,

ShowFlight类存在一个问题:它混杂了三个功能:

  1. 为飞行路径提供一个面板
  2. 将飞行路径显示在面板中
  3. 计算飞行路径

ShowFlight类可以正常工作,但是考虑到之后我们会改变某些具体的功能,根据关注点分离的原则,我们应将其重构为多个单独的类,以提高可维护性以及可重用性。

我们可以做出如下改变:

  • 引入一个Function类,它定义了f()方法,接收一个double值(时间值),返回一个double值(函数的值,即坐标值)。
  • 将createTitledPanel()方法移到已存在的UI工具类中,来实现一个像当前ShowFlight类那样带有标题的面板。
  • 将ShowFlight类移入PlotPanel类,改为使用Function对象来获取x和y值。定义PlotPanel构造函数接收两个Function实例和绘图所需的点数。

类图设计如图所示,

main方法还是写在ShowFlight中,但是我们把它取名为ShowFlight2。Function类用来获取对应的x和y的坐标值。但是因为具体x和y是怎样的一个值,则由具体的问题决定。PlotPanel使用Function的实现方法获取到的x和y值来画图。UI类再得到画好图的PlotPanel引用,来创建一个有边框的JPanel。最后ShowFlight2生成一个frame,并使用UI类的方法得到完整的轨迹图界面(这里使用了单例设计模式,ShowFlight2类先得到了UI的单例,再调用方法)。

原来的ShowFlight类是一个示例程序,它可以直接运行,但是对子系统的功能无法复用;而经过重构后的外观类则是可配置、可重用的类,提供了高层次的接口,使得子系统的使用更加方便。

JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第4章 外观(Facade)模式的更多相关文章

  1. Java设计模式(Design Patterns In Java)读书摘要——第1章 绪论

    为何需要模式 模式是做事的方法,是实现目标,研磨技术的方法.通俗点说,模式是为了解决某个行业的某个问题的有效的方法或技艺. 为何需要设计模式 为了提升代码的水准,是代码变得简洁而易用.模式是一种思想, ...

  2. 设计模式--外观(Facade)模式

    Insus.NET在去年有写过一篇<软件研发公司,外观设计模式(Facade)>http://www.cnblogs.com/insus/archive/2013/02/27/293606 ...

  3. 设计模式(Design Patterns)Java版

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. Examples of GoF Design Patterns in Java's core libraries

    设计模式分类 stackOverflow Structural(结构模式) Adapter:把一个接口或是类变成另外一种. java.util.Arrays#asList() javax.swing. ...

  5. 云设计模式-Design patterns for microservices

    云设计模式 https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/ https://www.cnblogs. ...

  6. 设计模式(Design Patterns)的简单讲解

    模式的诞生与定义 模式(Pattern)起源于建筑业而非软件业(小本本记下来--) 模式之父--美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士; 模式 : -C ...

  7. Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异

    本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...

  8. Head First 设计模式 —— 08. 外观 (Facade) 模式

    思考题 想想看,你在 JavaAPI 中遇到过哪些外观,你还希望 Java 能够新增哪些外观? P262 println.log 日志接口.JDBC 接口 突然让想感觉想不出来,各种 API 都用得挺 ...

  9. 设计模式C++描述----14.外观(Facade)模式

    一. 举例说明 还以我以前做的文件系统(FileSys)为例: 文件系统是一个独立的系统,它提供一套核心的文件操作. 除了文件系统,还有四个子系统,分别是杀毒子系统(KillVirus),压缩子系统( ...

随机推荐

  1. 在Linux最大打开文件数限制下 MySQL 对参数的调整

    http://www.actionsky.com/docs/archives/78  2016年4月7日  周文雅 目录 1 起因 2 说明 3 MySQL调整参数的方式 3.1 计算 request ...

  2. JAVA设置SimpleDateFormat函数时区

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZo ...

  3. 【优先队列】HDU 1873——看病找医生

    来源:点击打开链接 看路径记录的BFS之前,再看一遍优先队列的用法. 优先队列的排序规则可以用运算符重载的方式完成,通常意义下,应该用friend bool operator <进行重载. #i ...

  4. hdu1050 Moving Tables

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1050 求区间上点的最大重叠次数. #include <stdio.h> #include &l ...

  5. 优化Laravel网站打开速度

    Laravel是一个功能强大的框架,组件很多,代码也很庞大,它的易用方便是牺牲了性能的,即便如此它仍然是一个优秀的框架,但在正式环境下要做好优化提升网站的打开速度. 1.关闭debug 打开.env文 ...

  6. jquery 和 $

    而jQuery就是jQuery库提供的一个函数.(好像也不仅仅只是函数, 因为还有 $.ajax(options) 这样的使用,等同 jQuery.ajax(options)) 这个函数的作用是根据 ...

  7. 【源码】基于SQLite实现CMS论坛(BBS)----附件SQLite可视化界面客户端

              使用说明:管理员账号:admin  密码:523523523   一.  账号管理(登陆注册审核) 1.账号注册 url:/BBS/Account/pregister.aspx 2 ...

  8. Excel两行交换及两列交换,快速互换相邻表格数据的方法

    经常使用办公软件的人可能有遇到过需要将Excel相邻两行数据相互交换的情况,需要怎么弄才最方便呢?您还是像大家通常所做的那样先在Excel文件相应位置插入一个新的空白行然后在复制粘贴数据然后删除原来那 ...

  9. FormsAuthenticationTicket学习笔记

    FormsAuthenticationTicket ticket = , ), true, string.Format("{0}:{1}", "username" ...

  10. 【Dijkstra】

    [摘自]:华山大师兄,推荐他的过程动画~   myth_HG 定义 Dijkstra算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩 ...