首页 > 代码库 > 8 外观模式

8 外观模式

外观模式(Facade)定义:提供了一个统一的接口,用来访问子系统中的一组接口。此模式定义了一个高层接口,让子系统更易于使用。

类图如下:

技术分享

Facade类封装了SubSystem的方法或接口,Client只需与Facade交互。比如,如果SybSystem是单支股票,那么基金就可以认为是他们的Facade,因为一支基金背后有好多支股票,对用户来说,基金也比股票省心。

外观模式的使用场合有如下几种情况:

1 在设计阶段,应该有意识地将不同的层分开,比如三层架构,在层与层之间就可以使用外观模式;

2 在开发阶段,子系统因为不断的重构演化而变得复杂,可以用外观模式简化调用;

3 维护旧系统时,对于内部一些重要的功能,这些功能和背后的代码都比较复杂,基于这些功能开发的时候,可以使用外观模式。

外观模式与适配器模式的比较:

外观模式和适配器模式都可以封装很多个类。但两者的意图不同,外观模式的意图是简化接口,而适配器模式的意图是将接口转换成不同的接口。

此外,外观模式还可以附加“聪明”的功能,因为Facade内部可以控制对子系统的调用方式,就像基金管理人的操作多支股票一样。

德墨忒尔法则

德墨忒尔法则(Law of Demeter)也叫最少知识,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话。类应当降低成员的访问权限,除非有必要让外部访问的成员,否则都设置为private,而需要公开的字段,就要用属性来封装。

德墨忒尔法则强调类与类之间的松耦合,松耦合的设计可以促进复用。

8 外观模式