门面(facade)指建筑物的表面,尤其是最有吸引力的那一面。当人们从建筑物旁边经过时,可以欣赏其外部面貌,而不必了解其本身结构的复杂性。门面在隐藏内部复杂性的同时,也为客户端提供了一个可以轻松访问的接口。
比如需要到某个商店买东西,但对于该商店的布局并不清楚。可以直接找店主说明需要哪些东西,由店主将这些商品找到并提供给顾客。即店主作为购物的接口,顾客无需了解具体商品的位置。
门面设计模式的特点:
- 为子系统的一组接口提供一个统一的高级接口,帮助客户端以更简单的方式使用这些子系统
- 门面并不是封装子系统,而是对底层子系统进行组合。即用单个接口对象表示复杂的子系统
门面
- 一个接口,知道某个请求应该交由那个子系统处理
- 通过组合的方式将客户端的请求委派给相应的子系统对象
系统
- 实现子系统的功能,由一组负责不同任务的类来表示
- 处理门面对象分配的工作,但并不知道门面也不引用它
客户端
- 会实例化门面
- 会向门面提出请求
1 | class EventManager: |
最少知识原则
门面能够将客户端与实现具体功能的子系统解耦,其背后的设计原理即最少知识原则。
- 在设计系统时,对于创建的每个对象,都应该考察与之交互的类的数量,以及交互的方式
- 避免创建许多彼此紧密耦合的类。若类之间存在大量的依赖关系,系统就会变得难以维护,应坚决避免