大话设计模式之外观模式
外观模式(Facade),也叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式是一种使用频率非常高的结构型设计模式,他通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。
就拿大家最喜欢吃的泡面来说(额,稍微没有出息点),我们吃泡面可以有两种选择:一是选择自己煮;二是到食堂的窗口叫阿姨煮。 如果你自己煮泡面吃呢?还需要准备开水,泡面,锅等工具,对自己好点的话加个鸡蛋,还需要去买个鸡蛋。但是如果你在食堂吃呢?你只需要跟食堂的阿姨说,你想要什么口味的泡面,加不加鸡蛋就OK了,我们只需等着面熟吃就行了。例如下面的图:
从上面的图中我们可以看出,正因为有食堂煮面的阿姨,所以减少了我们与泡面、开水和鸡蛋等直接打交道这一环节。而这些煮面的程序都由食堂的阿姨来完成。我们只要跟阿姨交打交道就行。食堂的阿姨就相当于是外观模式的外观类。它就相当于是给客户端提供了两个端口,一个比较复杂,一个比较简单。使用它的最大目的就是为了降低系统类与类之间的耦合度。
下面是结构图:
说明:
Facade,这个外观类为子系统提供一个共同的对外接口。
Client,客户对象通过一个外观接口读写子系统中各接口的数据资源
SubSystem,实现子系统的功能,处理Facade对象指派的任务。
外观模式的代码模型:
1.子系统类,可以使一个类,一个功能块,系统的一个组成部分或者是一个完整的系统。
2.外观类,将子系统的方法和属性进行了组合,以备外界调用
3.客户端调用,由于Facade的作用,客户端可以根本不知子系统类的存在。外观模式的使用:
1.当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。
2.客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
3.在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。