作用:
为一组具有复杂且全面的接口对象提供一个简单特定的接口。
正文:
“金玉其外,败絮其中。”这句话对门面模式倒是可以解释。“金玉其外”指的就是门面,是调用者能看到的,是简单特定的接口。“败絮其中”指的就是复杂且全面的接口对象,里面有复杂的逻辑和结构,对调用者来说,是不可见的。
如果调用者不通过门面类而直接调用子系统的接口,那就是很头疼的事。“一叶障目,不见泰山。”这就是门面模式的作用。
我就用一个饭店的例子。
一个饭店,有很多的部门,顾客对每一个部门的职责不关心,要吃饭的顾客只要走进饭店,就有服务员过来服务,等酒足饭饱后,顾客只要说声买单,就有服务员过来结账。对于顾客而言,并不知道服务员是哪个部门的。
再举个例子,那就是照相机里的程序。在拍照前,照相机要做很多的事情,调节光圈,调节焦距,是否要开闪光灯,还有很多普通用户根本不知道的。而这些对于摄影初学者来说,是一窍不通的。这时自动拍照功能就是一个门面模式的应用。用户只要取景,再按快门就行了,其它一切复杂的动作都被隐藏起来。
门面模式不一定是一个类,也可以是一组函数。它把所有全面性和复杂性隐藏在一个非常简单且特定的接口后面,它是用户访问子系统的唯一途径,所有越过接口直接去访问子系统都是违背约定的。
门面模式比较简单,我也就不多说了。