外观(Facade)模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外观(Facade)模式相关的知识,希望对你有一定的参考价值。
外观模式就类似于一个工具包,一个类对应一个功能。
外观模式的意图是为子系统提供一个接口,便于它的使用。
书中给出的例子是画一个哑弹的飞行路径, 初始的类的设计是这样的,看下图,
ShowFlight类存在一个问题:它混杂了三个功能:
- 为飞行路径提供一个面板
- 将飞行路径显示在面板中
- 计算飞行路径
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类是一个示例程序,它可以直接运行,但是对子系统的功能无法复用;而经过重构后的外观类则是可配置、可重用的类,提供了高层次的接口,使得子系统的使用更加方便。
以上是关于外观(Facade)模式的主要内容,如果未能解决你的问题,请参考以下文章