公司的项目都做几个月了,其中用了大量的Facade模式,现在来具体说说。
门面模式是对象的结构模式。外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式。
现代的软件系统都比软复杂,设计者处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。但这样做了之后,设计者往往会发现一个子系统内仍然有太多的类要处理。而使用一个子系统的客户端往往只关注一些特定的功能,需要同时与子系统内部的许多对象打交道后才能达到目的。
这就是一种不便,它使得系统的逻辑变得不必要的复杂,维护成本提高,复用率降低。
医院的例子
如果把中国大陆的医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费,取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事了。首先病人必须先挂号、然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊室。
解决这种不便的方法便是引进门面模式。如上面的例子,可以设置一个接待员的位置,由接待负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道。
什么是门面模式
门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
就如同医院的接待员一样,门面模式的门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。