Java外观模式
不好意思上一篇外观模式没有完稿,在此重新写一下。
外观模式
产生原因
在软件开发过程中,程序一般会越做越大,而这样系统中类及子系统之间的影响会使彼此间的关系变得错综复杂即过多的耦合,这就导致了随着系统中类或子系统发生变化,与之相关联的子系统或类就需要发生变化
”如何应对变化“是软件系统开发过程中非常重要的一个问题。生活在一个动态的世界,我们不能杜绝变化的发生,但我们可以通过一些手段让变化降至最低。
本节课所学习的Façade模式正式解决这种问题的方法之一。下面我们先通过两个例子理解一下:
举例
1.电源总开关
为了使用方便,一个电源总开关可以控制两盏灯、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。
2.旅游照相
几乎每个人都喜欢旅游,那旅游要带个相机吧。现在单反数码相机很多见,但是不是人人都会用。沿途不仅要记录下美好的风光,更重要的还要给自己拍几张留念。可是有时候找了半天没找到一个会用的路人,别着急,把相机跳到自动档,按下快门就可以了。这也跟外观模式很像。
外观模式
模式定义
外观模式又称为门面模式,它是一种对象结构型模式。
外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
更简单的理解外观模式
通过外观的包装,使客户程序只能看到外观对象而不会看到具体细节对象。从而降低了系统的复杂度,并提高了程序的可维护性。
如同黑匣子
下面来看一下未使用Facade模式的结构
于是我们自然而然的会想到运用程序设计里边所学,把Client和Subsystem封装起来,提供一个统一的接口。
外观模式动机
引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,将复杂系统的内部子系统与客户程序之间的依赖解耦,降低了系统的耦合度。
它侧重于简化接口,更多的是一种架构模式。
Frequency of use: high
模式结构
外观模式包含如下两个角色:
Facade: 外观角色
外观角色是在客户端直接调用的角色
SubSystem:子系统角色
在软件系统中可以同时有一个或者多个子系统角色
外观模式也是“迪米特法则”的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。
外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。
外观模式的目的在于降低系统的复杂程度。