问题描述
划分一个系统成为多个子系统,是设计一个复杂系统,简化系统设计的典型方法。但是,如果直接向客户暴露这些子系统接口,不利于系统设计的独立变化,更可能把子系统之间的交互关系直接暴露给客户,从而导致客户逻辑的复杂性。外观模式为系统提供一套相对简洁的接口,降低客户逻辑和系统具体设计的依赖性/耦合性;也让系统设计独立于客户而扩展变化成为可能。
外观模式
如图所示,外观模式的核心要点是:为系统提供一套外部接口,并转发客户请求到相关的子系统。客户通常通过Facade访问子系统,降低了客户和子系统的耦合。
讨论
客户程序通过一个抽象的Facade类设计,而让具体的Facade子类来对应不同的子系统实现,可以更一步降低客户和子系统的耦合度。