设计模式分为三类,每个设计模式都属于这三类模式中的一种:创建型,处理对象创建中的相关问题;结构型,为组织系统中的类与对象提供方法;行为型,为设计系统中对象间的协作提供策略。
体系结构设计模式,帮助设计者将功能分配给系统中各个子系统的设计模式。
设计模式使得开发人员可以设计系统的具体部分,比如讲对象实例化抽象或将类聚集成更大的结构。设计模式还促进了对象之间的松散耦合。体系结构模式促进了系统之间的松散耦合。这些模式规定了系统中的所有子系统,以及彼此交互的方式。这里讨论流行的模型--视图--控制器MVC和层次体系结构模式。
MVC
考虑一个简单的文本编辑器的设计。在这个程序中,用户从键盘输入文本,使用鼠标格式化文本。我们的程序将这些文本和格式信息存储进一系列的数据结构,然后将它们显示在屏幕一共用户阅读。这个程序遵循模型--视图--控制器体系结构模式,该模式将应用程序数据(包含在模式中)与图形化呈现组件(视图)和输入处理逻辑(控制器)这三者分开。它们三者的关系是,控制器修改模型,模型通知视图做出改变。
控制器实现处理用户输入的逻辑。模型包含应用程序数据、视图显示存储在模型中的数据。当一个用户提供某些输入,控制器使用这些输入修改模型。至于这个文本编辑器的例子,模型也许只包含构成文档的字符。当模型发生变化时,它向视图通知这些变化,从而视图可以用以改变的视图来更新它的显示。字处理程序中的视图也许会以特定的字体和特定的大小来显示字符。
MVC并不将应用程序局限于单一视图和单一控制器。在更复杂的程序(比如字处理程序)中,一个文档模型可能具有两个视图。一个视图可能显示文档的缩略图,另一个视图可能显示完整的文档。字处理程序还实现了多控制器----一个处理键盘输入,另一个处理鼠标选择。只要任一控制器做了改变,那么当模型把变化通知给所有视图的时候,缩略图和打印预览窗口都将立刻显示出这个变化。
MVC体系结构模式的另一个主要优点在于:开发人员可以独立地修改每一个组件,而不必改变其他组件。比如说,开发人员可以修改显示文档缩略的视图,但不必修改模型、其它视图或控制器。
层次
这个体系结构将一个系统分为三层:信息层(底层)、中间层、客户层(顶层),每一层都是一个独特的系统组件。
信息层:维护应用程序的数据,通常是将数据存储在数据库中。在线商店系统的信息层可能包含产品信息(比如存货的描述、价格和质量)以及顾客信息(比如用户名、账单地址和信用卡号等)。
中间层:充当信息层和客户层之间的中间人。中间层首先处理客户层向数据库读写数据的请求。然后,中间层处理来自信息层的数据,并把内容显示给客户层。这种处理过程即是应用程序的业务逻辑。它从信息层检索数据,在更新数据库和向客户层显示数据之前确保数据的可靠性。比如,与在线商店系统的中间层相关的业务逻辑可以在发货之前通过信用卡发行人来核实顾客的信用卡。这个业务逻辑可以在数据库中存储(或检索)信用卡信息,并通知客户层验证已经通过。
客户层:是应用程序的用户界面,比如一个标准的Web浏览器。用户通过用户界面与应用程序直接进行交互。客户层与中间层进行交互以发出请求,并从信息层检索数据。客户层随后显示这些数据。
分层体系结构模式把功能块分成独立的层次。每一层包含一套系统职责,并仅仅依赖于下一较低层次的服务。设计人员可以对一个分层进行修改,而不必修改其他的分层。比如设计人员可以修改信息层以使用一个具体的数据库产品,但他不必修改客户层和中间层。