外观模式(Facade)定义:提供了一个统一的接口,用来访问子系统中的一组接口。此模式定义了一个高层接口,让子系统更易于使用。
类图如下:
Facade类封装了SubSystem的方法或接口,Client只需与Facade交互。比如,如果SybSystem是单支股票,那么基金就可以认为是他们的Facade,因为一支基金背后有好多支股票,对用户来说,基金也比股票省心。
外观模式的使用场合有如下几种情况:
1 在设计阶段,应该有意识地将不同的层分开,比如三层架构,在层与层之间就可以使用外观模式;
2 在开发阶段,子系统因为不断的重构演化而变得复杂,可以用外观模式简化调用;
3 维护旧系统时,对于内部一些重要的功能,这些功能和背后的代码都比较复杂,基于这些功能开发的时候,可以使用外观模式。
外观模式与适配器模式的比较:
外观模式和适配器模式都可以封装很多个类。但两者的意图不同,外观模式的意图是简化接口,而适配器模式的意图是将接口转换成不同的接口。
此外,外观模式还可以附加“聪明”的功能,因为Facade内部可以控制对子系统的调用方式,就像基金管理人的操作多支股票一样。
德墨忒尔法则
德墨忒尔法则(Law of Demeter)也叫最少知识,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话。类应当降低成员的访问权限,除非有必要让外部访问的成员,否则都设置为private,而需要公开的字段,就要用属性来封装。
德墨忒尔法则强调类与类之间的松耦合,松耦合的设计可以促进复用。