技术开发 频道

结构型模式篇-外观模式(Façade Pattern)


【IT168 技术文档】
概述

    在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。

意图

    为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》]

示意图

    门面模式没有一个一般化的类图描述,下面是一个示意性的对象图:

                                 图1 Façade模式示意性对象图

生活中的例子

    外观模式为子系统中的接口定义了一个统一的更高层次的界面,以便于使用。当消费者按照目录采购时,则体现了一个外观模式。消费者拨打一个号码与客服代表联系,客服代表则扮演了这个"外观",他包含了与订货部、收银部和送货部的接口。


                 图2使用电话订货例子的外观模式对象图

Facade模式解说

    我们平时的开发中其实已经不知不觉的在用Façade模式,现在来考虑这样一个抵押系统,当有一个客户来时,有如下几件事情需要确认:到银行子系统查询他是否有足够多的存款,到信用子系统查询他是否有良好的信用,到贷款子系统查询他有无贷款劣迹。只有这三个子系统都通过时才可进行抵押。我们先不考虑Façade模式,那么客户程序就要直接访问这些子系统,分别进行判断。类结构图下:


    在这个程序中,我们首先要有一个顾客类,它是一个纯数据类,并无任何操作,示意代码:

//顾客类 public class Customer { private string _name; public Customer(string name) { this._name = name; } public string Name { get { return _name; } } }





0
相关文章