第十章面向对象设计_第1页
第十章面向对象设计_第2页
第十章面向对象设计_第3页
第十章面向对象设计_第4页
第十章面向对象设计_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第10章章 面向对象设计面向对象设计110.1 架构设计架构设计10.2 详细设计详细设计10.3 设计模式设计模式 第第10章章 面向对象设计面向对象设计2掌握架构设计的概念和原则掌握架构设计的概念和原则;掌握常用的架构摸式掌握常用的架构摸式; 掌握详细设计原则和设计内容;掌握详细设计原则和设计内容;4.4.了解了解各种设计模式;各种设计模式; 第第10章章 面向对象设计面向对象设计3第第10章章 面向对象设计面向对象设计410.1 架构设计 (1)什么是软件架构)什么是软件架构 软件架构是一种思想,一个系统蓝图,对软件结构组软件架构是一种思想,一个系统蓝图,对软件结构组成的规划和职责设定

2、。一个软件里有处理计算的、处理界成的规划和职责设定。一个软件里有处理计算的、处理界面的、处理数据的、处理业务规则的、处理安全的等许多面的、处理数据的、处理业务规则的、处理安全的等许多可逻辑划分出来的部分。软件架构的意义就是要将这些可可逻辑划分出来的部分。软件架构的意义就是要将这些可逻辑划分的部分独立出来,用约定的接口和协议将他们有逻辑划分的部分独立出来,用约定的接口和协议将他们有机的结合在一起,形成职责清晰、结构清楚的软件结构。机的结合在一起,形成职责清晰、结构清楚的软件结构。 软件架构是一个逻辑性的框架描述,它可能并无真正软件架构是一个逻辑性的框架描述,它可能并无真正的可执行部分。大部分的软

3、件架构都是由一个设计思想,的可执行部分。大部分的软件架构都是由一个设计思想,加上若干设计模式,在规定一系列的接口规范、传输协议、加上若干设计模式,在规定一系列的接口规范、传输协议、实现标准等文档构成的。实现标准等文档构成的。第第10章章 面向对象设计面向对象设计510.1 架构设计 软件框架是软件架构的一种实现,是一个半成品。它通软件框架是软件架构的一种实现,是一个半成品。它通常针对一个软件架构当中某一个特定的问题提供解决方案常针对一个软件架构当中某一个特定的问题提供解决方案和辅助工具。因此,如果说架构是一个逻辑的构成,而框和辅助工具。因此,如果说架构是一个逻辑的构成,而框架则是一个可用的半成

4、品,是可执行的。架则是一个可用的半成品,是可执行的。 一个软件架构应当包括软件层次、每一层次的职责、一个软件架构应当包括软件层次、每一层次的职责、层次之间的接口、传输协议和标准以及每一层次上所采用层次之间的接口、传输协议和标准以及每一层次上所采用的软件框架的软件框架 第第10章章 面向对象设计面向对象设计6软件架构的内容软件架构的内容 第第10章章 面向对象设计面向对象设计7在在RoseRose中,我们可以用包图来描述软件架构。如下图所示,描述了一个由五个层次构成的软中,我们可以用包图来描述软件架构。如下图所示,描述了一个由五个层次构成的软件架构。件架构。 第第10章章 面向对象设计面向对象设

5、计810.1 架构设计 自顶向下原则自顶向下原则 职能集中原则职能集中原则 互不交叉原则互不交叉原则 第第10章章 面向对象设计面向对象设计9 自顶向下分包原则自顶向下分包原则 第第10章章 面向对象设计面向对象设计10职能集中原则职能集中原则 第第10章章 面向对象设计面向对象设计11增加新类并单独分包增加新类并单独分包 交叉依赖的类单独分包交叉依赖的类单独分包 第第10章章 面向对象设计面向对象设计1210.1 架构设计 分层架构模式分层架构模式 分层(分层(Layer)模式是最常见的一种架构模式。甚至)模式是最常见的一种架构模式。甚至说分层模式是很多架构模式的基础。分层描述的是这样一说分

6、层模式是很多架构模式的基础。分层描述的是这样一种架构设计过程:从最低级别的抽象开始,称为第种架构设计过程:从最低级别的抽象开始,称为第1层。层。这是系统的基础。通过将第这是系统的基础。通过将第J层放置在第层放置在第J-1层的上面逐步层的上面逐步向上完成抽象阶梯,直到到达功能的最高级别,称为第向上完成抽象阶梯,直到到达功能的最高级别,称为第N层。如图下所示。层。如图下所示。第第10章章 面向对象设计面向对象设计13分层架构模式分层架构模式 第第10章章 面向对象设计面向对象设计14分层构架具有以下优点:分层构架具有以下优点:层次的复用性。为每个层次建立好抽象接口,可以使其在其他环境复用。层次的复

7、用性。为每个层次建立好抽象接口,可以使其在其他环境复用。支持基于抽象程度递增的系统设计,使设计者可以对复杂系统进行分解,支持基于抽象程度递增的系统设计,使设计者可以对复杂系统进行分解,从而使系统更容易模块化。从而使系统更容易模块化。支持功能增强。因为每一层至多和相邻的上下层进行交互,因此功能的支持功能增强。因为每一层至多和相邻的上下层进行交互,因此功能的改变最多影响相邻的两层。改变最多影响相邻的两层。可替换性。独立的层次设计容易被功能相似的模块替换。可替换性。独立的层次设计容易被功能相似的模块替换。分层构架也有一些缺点,主要表现在:分层构架也有一些缺点,主要表现在:效率低。分层结构通常要比单层

8、结构效率低,原因是有时高层过分依赖效率低。分层结构通常要比单层结构效率低,原因是有时高层过分依赖底层的服务,必须经过许多中间层进行数据传递。底层的服务,必须经过许多中间层进行数据传递。增加了一些不必要的工作。增加了一些不必要的工作。改变行为的连锁反应。改变行为的连锁反应。设计者要建立不同合适粒度的抽象层次有一定困难。设计者要建立不同合适粒度的抽象层次有一定困难。常见的分层架构模式有:常见的分层架构模式有:客户端客户端-服务器模型(服务器模型(Client-Server,C/S)。)。三层模型:用户表示层、业务逻辑层、数据层。三层模型:用户表示层、业务逻辑层、数据层。第第10章章 面向对象设计面

9、向对象设计1510.1 架构设计 2.黑板模式黑板模式 黑板模式的思想是,有一系列独立的模块,或者说是黑板模式的思想是,有一系列独立的模块,或者说是方案,这些方案能解决部分问题的一部分,这些方案进行方案,这些方案能解决部分问题的一部分,这些方案进行协作,使得问题问题能够最终解决。这就像一群人在一块协作,使得问题问题能够最终解决。这就像一群人在一块 黑板前,共同解决一个问题,根据当前问题解决的程度和黑板前,共同解决一个问题,根据当前问题解决的程度和状态,不同的人上前到黑板上解决他所能解决的部分,这状态,不同的人上前到黑板上解决他所能解决的部分,这样经过多人的协作,最终能够将问题解决。这就是样经过

10、多人的协作,最终能够将问题解决。这就是 黑板模黑板模式这个名字的来历。黑板模式的实现分为三个主要的组件:式这个名字的来历。黑板模式的实现分为三个主要的组件:黑板黑板(Blackboard),知识源,知识源(Knowledge Source)和控制和控制(Control)。如图下所示。如图下所示。第第10章章 面向对象设计面向对象设计16黑板模式黑板模式 第第10章章 面向对象设计面向对象设计1710.1 架构设计 3.管道管道/过滤器模式过滤器模式 管道管道/过滤器模式构架中的每个构件都有一组输入和输过滤器模式构架中的每个构件都有一组输入和输出,构件读入数据流,经过处理产生输出数据。这个过程出

11、,构件读入数据流,经过处理产生输出数据。这个过程通过对输入流的变换及增量计算来完成,因此在输入流被通过对输入流的变换及增量计算来完成,因此在输入流被完全使用掉之前,变产生了输出,这样的构件就是过滤器,完全使用掉之前,变产生了输出,这样的构件就是过滤器,而构件间的连接件就像是数据流传输的管道,它将数据从而构件间的连接件就像是数据流传输的管道,它将数据从一个过滤器传到另一个过滤器。其中,过滤器必须是独立一个过滤器传到另一个过滤器。其中,过滤器必须是独立的实体,它不能与其他的过滤器共享数据。多个过滤器相的实体,它不能与其他的过滤器共享数据。多个过滤器相连,可以形成过滤器链。而每个过滤器功能单一,可以

12、单连,可以形成过滤器链。而每个过滤器功能单一,可以单独修改,链中过滤器的排列顺序可以根据需求进行配置。独修改,链中过滤器的排列顺序可以根据需求进行配置。第第10章章 面向对象设计面向对象设计18特征:特征:l每个过滤器构件是一个独立的部件,除了输入流和输每个过滤器构件是一个独立的部件,除了输入流和输出流外,过滤器之间互不影响,因此,过滤器之间不共出流外,过滤器之间互不影响,因此,过滤器之间不共享任何状态信息。享任何状态信息。l每个过滤器对其上游或下游连接的过滤器是透明的,每个过滤器对其上游或下游连接的过滤器是透明的,它的实现和使用不对链中的任何过滤器加以限制。如下它的实现和使用不对链中的任何过

13、滤器加以限制。如下图所示。图所示。管道管道/ /过滤器模式过滤器模式第第10章章 面向对象设计面向对象设计19 这种构架具有以下优点:这种构架具有以下优点: 可以创建具有良好隐蔽性和高内聚、低耦合的构件。可以创建具有良好隐蔽性和高内聚、低耦合的构件。 设计者可以将整个系统的输入设计者可以将整个系统的输入/ /输出行为看成是多个过输出行为看成是多个过滤器行为的简单合成。滤器行为的简单合成。 支持软件重用。支持软件重用。 通过添加新的过滤器或换掉旧的过滤器可以方便地维通过添加新的过滤器或换掉旧的过滤器可以方便地维护系统,增强现有的系统功能。护系统,增强现有的系统功能。 可以对一些如吞吐量、死锁等问

14、题进行分析。可以对一些如吞吐量、死锁等问题进行分析。 支持并发过程。每个过滤器作为一个单独的任务完成,支持并发过程。每个过滤器作为一个单独的任务完成,因此可与其他任务并行执行,有较高的并行处理效率。因此可与其他任务并行执行,有较高的并行处理效率。第第10章章 面向对象设计面向对象设计2010.1 架构设计 4.中介模式中介模式 中介模式是构建带有隔离构件的分布式系统,系统通中介模式是构建带有隔离构件的分布式系统,系统通过远程服务调用进行交互。中介构件负责协调通信,包括过远程服务调用进行交互。中介构件负责协调通信,包括转发请求、传送结果和异常等。这样的构架模式并不是一转发请求、传送结果和异常等。

15、这样的构架模式并不是一个整体的应用程序,而是若干个独立的和互操作的构件集个整体的应用程序,而是若干个独立的和互操作的构件集合。通过将功能分割成独立的构件,系统具有可分割性和合。通过将功能分割成独立的构件,系统具有可分割性和可扩展性,并具有较大的灵活性、可维护性和可变性。在可扩展性,并具有较大的灵活性、可维护性和可变性。在中介构架中,系统可以添加、移动、交换、激活和定位构中介构架中,系统可以添加、移动、交换、激活和定位构件服务,可以仅通过对象接口使用服务器中的应用程序对件服务,可以仅通过对象接口使用服务器中的应用程序对象,而不需要要知道对象的细节或其物理位置。象,而不需要要知道对象的细节或其物理

16、位置。第第10章章 面向对象设计面向对象设计2110.1 架构设计 5.代理模式代理模式 代理模式由是客户机、服务器、代理程序、桥接、客代理模式由是客户机、服务器、代理程序、桥接、客户端代理和服务器端代理等构件组成的构架模式。户端代理和服务器端代理等构件组成的构架模式。客户机通过代理程序发送请求访问服务器功能。客户机通过代理程序发送请求访问服务器功能。服务器为应用领域提供公共服务,或者向单一应用提供服务器为应用领域提供公共服务,或者向单一应用提供 特定的功能服务。特定的功能服务。代理程序位于客户机和服务器之间,协调客户机和服务代理程序位于客户机和服务器之间,协调客户机和服务器之间的活动。器之间

17、的活动。 第第10章章 面向对象设计面向对象设计22客户机端代理是客户机和代理程序之间的一个层。客户机端代理是客户机和代理程序之间的一个层。 桥接是用来隐藏两个代理程序互相操作的细节的可选桥接是用来隐藏两个代理程序互相操作的细节的可选构件,它建立一个所有系统细节封装起来的层,便于系构件,它建立一个所有系统细节封装起来的层,便于系统在异构环境中运行。统在异构环境中运行。 通过使用代理模式,应用程序能够简单地通过向合通过使用代理模式,应用程序能够简单地通过向合适的对象发出消息调用访问分布式服务,而不是把重点适的对象发出消息调用访问分布式服务,而不是把重点放在低级进程间通信。另外,代理模式结构灵活,

18、允许放在低级进程间通信。另外,代理模式结构灵活,允许对对象动态改变、添加、删除和重定位。对对象动态改变、添加、删除和重定位。第第10章章 面向对象设计面向对象设计2310.1 架构设计 6.MVC模式模式 MVC是模型是模型-视图视图-控制器控制器(Model-View-Control)的简称,的简称,是一种流行的系统开发框架。是一种流行的系统开发框架。MVC把交互系统的组成分解把交互系统的组成分解成模型、视图、控制三种部件。如下图所示。成模型、视图、控制三种部件。如下图所示。 第第10章章 面向对象设计面向对象设计24MVCMVC模式模式第第10章章 面向对象设计面向对象设计25模型部件是软

19、件所处理问题逻辑在独立于外在显示内容和形式情模型部件是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,他独立于具体的界面表达和系,他独立于具体的界面表达和I/O操作。操作。视图部件把表示模型数据及逻辑关系和状态的信息及特定形式展视图部件把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。不同的显示形式或视图。控制部件是处理用户与软件交互操作的,其职责是控

20、制提供模型控制部件是处理用户与软件交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制。用户的输入,将输入反馈给模型,进而实现对模型的计算控制。模型、视图与控制器的分离,使得一个模型可以具有多个显示视模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时它依赖于这些数据的视图都应反映

21、到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化显示的更新。这实际上是一种模型的变化-传播机制。传播机制。第第10章章 面向对象设计面向对象设计26MVC的优点表现在以下几个方面:的优点表现在以下几个方面:可以为一个模型在运行时同时建立和使用多个视图。变化可以为一个模型在运行时同时建立和使用多个视图。变化-传传播机制可以确保所有相关的视图及时得到模型数据变化,从播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。而使所有关联的视图

22、和控制器做到行为同步。视图与控制器的可接插性,允许更换视图和控制器对象,而视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。象替换。模型的可移植性。因为模型是独立于视图的,所以可以把一模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。上对视图和控制器进行新的修改。潜在的框架结构。可以基于此模型建立应用程序框架,不仅潜在的框架结构。可以基于此模型建立

23、应用程序框架,不仅仅是用在设计界面的设计中。仅是用在设计界面的设计中。第第10章章 面向对象设计面向对象设计2710.1 架构设计 7.PAC模式模式 PAC是表示是表示-抽象抽象-控制控制(Presentation-Abstraction-Control)的简称,它也是从数据模型及界面可视化的处理的简称,它也是从数据模型及界面可视化的处理中提出的交互式系统构架。中提出的交互式系统构架。PAC将用户界面从数据管理中将用户界面从数据管理中分离出来,从而降低了部件间的耦合度。如下图所示。分离出来,从而降低了部件间的耦合度。如下图所示。 第第10章章 面向对象设计面向对象设计2810.1 架构设计

24、8.反射模式反射模式 反射模式是为动态地改变系统结构和行为提供相应机反射模式是为动态地改变系统结构和行为提供相应机制的架构模式。它使系统维护了自身的信息,并使用这种制的架构模式。它使系统维护了自身的信息,并使用这种信息来保持系统的可变性和可扩展性。一个反射系统在实信息来保持系统的可变性和可扩展性。一个反射系统在实现方面处于开放状态,以支持特定的结构和行为。现方面处于开放状态,以支持特定的结构和行为。 反射构架由两部分组成:元层次反射构架由两部分组成:元层次(Meta Level)和基本层和基本层次次(Base Level)。反射架构模式有以下优点:反射架构模式有以下优点:反射系统不直接修改源代

25、码。反射系统不直接修改源代码。系统更新简单易行。系统更新简单易行。支持多种类型的变更。支持多种类型的变更。第第10章章 面向对象设计面向对象设计2910.1 架构设计 8.反射模式反射模式 反射模式是为动态地改变系统结构和行为提供相应机反射模式是为动态地改变系统结构和行为提供相应机制的架构模式。它使系统维护了自身的信息,并使用这种制的架构模式。它使系统维护了自身的信息,并使用这种信息来保持系统的可变性和可扩展性。一个反射系统在实信息来保持系统的可变性和可扩展性。一个反射系统在实现方面处于开放状态,以支持特定的结构和行为。现方面处于开放状态,以支持特定的结构和行为。 反射构架由两部分组成:元层次

26、反射构架由两部分组成:元层次(Meta Level)和基本层和基本层次次(Base Level)。第第10章章 面向对象设计面向对象设计3010.1 架构设计 9.微核模式微核模式 微核是为应对需求变化所引起的系统更改而采取的一微核是为应对需求变化所引起的系统更改而采取的一种架构设计。这种架构强调应用系统的自修改和自扩展能种架构设计。这种架构强调应用系统的自修改和自扩展能力,使系统的变化与更新不影响其核心功能及关键设计,力,使系统的变化与更新不影响其核心功能及关键设计,从而降低为适应不断变化的需求必须进行的系统维护成本,从而降低为适应不断变化的需求必须进行的系统维护成本,使系统易于移植、扩展和

27、集成不断出现的新构件,具有高使系统易于移植、扩展和集成不断出现的新构件,具有高度适应性并能满足客户特殊的定制需求。度适应性并能满足客户特殊的定制需求。第第10章章 面向对象设计面向对象设计31微核模式由以下微核模式由以下5个部分组成:个部分组成: 内部服务器内部服务器 外部服务器外部服务器 适配器适配器 客户机客户机 微核微核第第10章章 面向对象设计面向对象设计3210.2 详细设计 单一职责原则单一职责原则 “开开-闭闭”原则原则 里氏代换原则里氏代换原则 合成复用原则合成复用原则 依赖倒置原则依赖倒置原则 接口隔离原则接口隔离原则 迪米特原则迪米特原则第第10章章 面向对象设计面向对象设

28、计3310.2 详细设计 类设计就是根据具体的实现语言将分析类转换成设计类,类设计就是根据具体的实现语言将分析类转换成设计类,即按具体的实现语言,如即按具体的实现语言,如Java、C#等,对分析类中的边等,对分析类中的边界类、实体类和控制类细化已有方法、补充类属性,完界类、实体类和控制类细化已有方法、补充类属性,完成基本设计模型。成基本设计模型。 类设计是将分析模型映射到设计模型最基础也是最重要类设计是将分析模型映射到设计模型最基础也是最重要的一项工作。的一项工作。 以学生选课这个系统用例为例,并且假设我们使用以学生选课这个系统用例为例,并且假设我们使用java语言来开发。在建立分析模型的过程

29、中,我们得到了如语言来开发。在建立分析模型的过程中,我们得到了如下图所示的实现了学生选课系统用例的分析模型类图。下图所示的实现了学生选课系统用例的分析模型类图。第第10章章 面向对象设计面向对象设计34学生选课用例分析模型学生选课用例分析模型 第第10章章 面向对象设计面向对象设计35 分析类直接映射到设计类分析类直接映射到设计类 上图所示的分析模型中,学生信上图所示的分析模型中,学生信息类已经非常接近设计类了,我息类已经非常接近设计类了,我们只需要将其属性和方法完善直们只需要将其属性和方法完善直接映射到设计类即可。如右图所接映射到设计类即可。如右图所示,学生信息类包含的属性有姓示,学生信息类

30、包含的属性有姓名、出生年月、性别、籍贯、入名、出生年月、性别、籍贯、入学时间、所属系别、班级、学号,学时间、所属系别、班级、学号,同时为了与系统实现一致我们为同时为了与系统实现一致我们为其增加其增加Id属性,包含的方法有设属性,包含的方法有设置和获取属性的方法,在这里我置和获取属性的方法,在这里我们分别为每个属性定义设置和获们分别为每个属性定义设置和获取的方法。取的方法。 学生信息设计类学生信息设计类第第10章章 面向对象设计面向对象设计36 分析类映射到多个设计类分析类映射到多个设计类选课控制类映射到设计类选课控制类映射到设计类 系统选课栏目边界类映系统选课栏目边界类映射到设计类射到设计类

31、第第10章章 面向对象设计面向对象设计37 分析模型映射设计模型分析模型映射设计模型 将分析类都映射到设计类后,将得到的设计类集中在将分析类都映射到设计类后,将得到的设计类集中在一张图中,绘制出这些设计类之间的关系,就得到了设计一张图中,绘制出这些设计类之间的关系,就得到了设计模型。下面两图分别展示了学生选课系统用例在模型。下面两图分别展示了学生选课系统用例在Web层的层的设计模型和,学生选课系统用例在设计模型和,学生选课系统用例在Business层的设计模型。层的设计模型。第第10章章 面向对象设计面向对象设计38学生选课学生选课web层设计模型层设计模型 第第10章章 面向对象设计面向对象

32、设计39学生选课学生选课Business层设计模型层设计模型 第第10章章 面向对象设计面向对象设计40 对分析类的补充对分析类的补充 将分析模型映射到设计模型后,得到了设计类及设计类将分析模型映射到设计模型后,得到了设计类及设计类之间的关系,至此得到了完整的静态设计模型。在比较复之间的关系,至此得到了完整的静态设计模型。在比较复杂的系统设计中,静态图往往还不足以指导开发,这时有杂的系统设计中,静态图往往还不足以指导开发,这时有必要绘制设计类的交互图来说明这些类如何交互完成设计必要绘制设计类的交互图来说明这些类如何交互完成设计功能。功能。 下图展示了下图展示了Business层学生选课设计类交

33、互图。层学生选课设计类交互图。 第第10章章 面向对象设计面向对象设计41Business层的学生选课设计类交互图层的学生选课设计类交互图第第10章章 面向对象设计面向对象设计4210.2 详细设计 面向对象的一大优点是接口与实现的分离,它使得我们在面向对象的一大优点是接口与实现的分离,它使得我们在考虑程序逻辑时可以完全不用考虑程序将怎样编写,而只考虑程序逻辑时可以完全不用考虑程序将怎样编写,而只考虑对象交互的接口。考虑对象交互的接口。 面向对象设计中,软件系统四通八达的神经网络正是通过面向对象设计中,软件系统四通八达的神经网络正是通过接口设计来构建的。接口设计来构建的。 接口使对象之间相互传

34、递消息从而构成整个系统。接口使对象之间相互传递消息从而构成整个系统。 接口设计不良会导致消息处理出错从而造成系统功能失效接口设计不良会导致消息处理出错从而造成系统功能失效 接口决定了整个系统是否能正常运行。接口决定了整个系统是否能正常运行。第第10章章 面向对象设计面向对象设计43 为单个对象设计接口为单个对象设计接口 典型的单个对象通常是封装某种算法,例如业务规典型的单个对象通常是封装某种算法,例如业务规则计算对象和业务逻辑处理对象。这些对象由于业务规则计算对象和业务逻辑处理对象。这些对象由于业务规则和业务逻辑的特殊使得它们很可能具有与众不同的方则和业务逻辑的特殊使得它们很可能具有与众不同的

35、方法。虽然这些对象没有抽象价值,但我们可以简单的为法。虽然这些对象没有抽象价值,但我们可以简单的为这些对象设计单独的接口,将它们的方法提取出来形成这些对象设计单独的接口,将它们的方法提取出来形成“接口接口实现实现”的形式为我们保留了替换实现类的可能。的形式为我们保留了替换实现类的可能。 如如10.2.3类设计一节中从分析类映射而来的处理选课类设计一节中从分析类映射而来的处理选课业务逻辑的业务逻辑的Business层的层的OfferuleControl这个类,他的方这个类,他的方法是独特的,没有抽象价值,我们可以简单的将它的方法是独特的,没有抽象价值,我们可以简单的将它的方法提取出来形成接口,接

36、口设计结果如下图所示。法提取出来形成接口,接口设计结果如下图所示。第第10章章 面向对象设计面向对象设计44单个对象接口单个对象接口 实现设计实例实现设计实例第第10章章 面向对象设计面向对象设计45 为具有相似性的对象设计接口为具有相似性的对象设计接口 在一个系统里会有许多具有相同或相似的行为模式。通常,在一个系统里会有许多具有相同或相似的行为模式。通常,这些对象承担着相同或相似的职责,即它们处理事情的办这些对象承担着相同或相似的职责,即它们处理事情的办法都差不多,但处理的内容和具体过程可能不同。法都差不多,但处理的内容和具体过程可能不同。 典型的具有相同或相似行为模式的对象是实体对象。实体

37、典型的具有相同或相似行为模式的对象是实体对象。实体对象主要作用是封装业务数据和对业务数据的操作方法。对象主要作用是封装业务数据和对业务数据的操作方法。虽然实体对象封装的业务数据千差万别,但操作数据的方虽然实体对象封装的业务数据千差万别,但操作数据的方法无非增删改查。这是典型的行为相似内容不同的对象的法无非增删改查。这是典型的行为相似内容不同的对象的例子。例子。第第10章章 面向对象设计面向对象设计46具有相似行为对象接口设计实例具有相似行为对象接口设计实例第第10章章 面向对象设计面向对象设计47 为软件各层次设计接口为软件各层次设计接口 一个多层次的软件架构中,各层次之间的交互是错综复一个多

38、层次的软件架构中,各层次之间的交互是错综复杂的。软件按层次分开的目的是为了使得各软件层职责杂的。软件按层次分开的目的是为了使得各软件层职责清晰,各负其责。但是如果层次之间的交互过程没有很清晰,各负其责。但是如果层次之间的交互过程没有很好的接口设计,软件分层带来的好处可能会完全丧失。好的接口设计,软件分层带来的好处可能会完全丧失。如选课系统例子中,如选课系统例子中,Web层与层与Business层之间的交互是层之间的交互是由各种由各种Action类和类和BussinessControl类来完成的。类来完成的。Action类的数量非常庞大,类的数量非常庞大,BussinessControl类的数量

39、也很可观,类的数量也很可观,在没有良好接口设计的情况下,在没有良好接口设计的情况下,WEB层与层与Business层之层之间的交互情况如下图所示错综复杂。间的交互情况如下图所示错综复杂。第第10章章 面向对象设计面向对象设计48无良好接口设计的层次交互无良好接口设计的层次交互 第第10章章 面向对象设计面向对象设计49采用门面模式后的层次交互采用门面模式后的层次交互 采用门面模式来处理采用门面模式来处理Web层和层和Business层之间的交互层之间的交互可以有效地减少交互的复杂度,使得层次之间保持清晰的可以有效地减少交互的复杂度,使得层次之间保持清晰的关联。如下图所示,交互的复杂层度得到了有

40、效的控制。关联。如下图所示,交互的复杂层度得到了有效的控制。第第10章章 面向对象设计面向对象设计5010.3 设计模式 设计模式提供一种解决问题的纲要设计,它描述普设计模式提供一种解决问题的纲要设计,它描述普遍存在的在相互联系的构件中重复出现的结构,从遍存在的在相互联系的构件中重复出现的结构,从而建立在一定的问题背景下通用的设计方案。而建立在一定的问题背景下通用的设计方案。 设计模式通常被分成创建型、结构型、行为型三类。设计模式通常被分成创建型、结构型、行为型三类。1.工厂模式工厂模式 工厂模式通过一个通用的工厂方法来生成对象,并专工厂模式通过一个通用的工厂方法来生成对象,并专门负责将大量有

41、共同接口的类实例化。工厂模式有简门负责将大量有共同接口的类实例化。工厂模式有简单工厂模式、工厂方法模式、抽象工厂模式三种。单工厂模式、工厂方法模式、抽象工厂模式三种。第第10章章 面向对象设计面向对象设计51简单工厂模式简单工厂模式 工厂方法模式工厂方法模式 第第10章章 面向对象设计面向对象设计52抽象工厂模式抽象工厂模式 第第10章章 面向对象设计面向对象设计5310.3 设计模式 2.单例模式单例模式 单例单例(Singleton)模式又叫单件模式,它保证一个类模式又叫单件模式,它保证一个类仅有一个实例,并且提供一个对它的全局访问点。即仅有一个实例,并且提供一个对它的全局访问点。即单例类

42、必须自己创建自己的唯一实例,保证没有其他单例类必须自己创建自己的唯一实例,保证没有其他实例可以被创建,并提供一个访问该实例的方法。实例可以被创建,并提供一个访问该实例的方法。 单例结构如下图所示。单例结构如下图所示。第第10章章 面向对象设计面向对象设计54 单例模式的参与者只有一个,即单例模式的参与者只有一个,即Singleton。Singleton拥有一个私有的构造函数,确保无法通过拥有一个私有的构造函数,确保无法通过new直接将其实直接将其实例化。此外,该类还高含有一个静态私有成员变量例化。此外,该类还高含有一个静态私有成员变量instance和静态公有方法和静态公有方法getInsta

43、nce()。getInstance()负责负责检验并实例化检验并实例化Singleton,然后存储在静态成员变量,然后存储在静态成员变量instance中,确保只有一个实例被创建。中,确保只有一个实例被创建。单例模式单例模式第第10章章 面向对象设计面向对象设计5510.3 设计模式 1.享元模式享元模式 享元模式以共享的方式高效地支持大量的细粒度享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态和对象。享元对象能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态是存储在享元对象内部并且不会外蕴状态。内蕴状态是存储在享元对象内部并且不会随环境改变而改变,因此内

44、蕴状态可以共享。外蕴状随环境改变而改变,因此内蕴状态可以共享。外蕴状态是随环境改变而改变的、不可以共享的状态。享元态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态是相互独立的。外蕴状态与内蕴状态是相互独立的。第第10章章 面向对象设计面向对象设计56 享元模式所涉及的角色有:享元模式所涉及的角色有: 抽象享元抽象享元(Flyweight)角色。角色。 具体享元具体享元(ConcreteFlyw

45、eight)角色。角色。 享元工厂享元工厂(FlyweightFactory)角色。角色。 客户端客户端(Client)角色。角色。享元模式享元模式 第第10章章 面向对象设计面向对象设计572.门面模式门面模式 门面模式为一组复杂接口对象提供简单且特定的接口,门面模式为一组复杂接口对象提供简单且特定的接口,以供外界使用。门面将子系统与客户及其它子系统分离,以供外界使用。门面将子系统与客户及其它子系统分离,可以提供高子系统的独立性和可移植性。可以提供高子系统的独立性和可移植性。 门面模式要求子系统的外部必须通过统一的接口与其内门面模式要求子系统的外部必须通过统一的接口与其内部进行通信,该模式提

46、供一个高级的接口,使得子系统部进行通信,该模式提供一个高级的接口,使得子系统更易于使用。更易于使用。 门面模式由三个角色组成:门面模式由三个角色组成:n门面角色门面角色 n子系统角色子系统角色n客户角色。客户角色。 第第10章章 面向对象设计面向对象设计583桥接模式桥接模式 桥接桥接(Bridge)模式是将抽象模式是将抽象(Abstraction)与实现与实现(Implementation)脱耦,使得二者可以独立地变化。脱耦,使得二者可以独立地变化。 耦合是两个实体间的某种强关联,脱离就是去掉它们间耦合是两个实体间的某种强关联,脱离就是去掉它们间的强关联,即将两个对象间的继承关系改为聚合关系

47、。的强关联,即将两个对象间的继承关系改为聚合关系。采用继承的情况下,具体实现依赖于抽象定义,抽象定采用继承的情况下,具体实现依赖于抽象定义,抽象定义被看作是相对稳定的。而对于像多个维度变化激烈的义被看作是相对稳定的。而对于像多个维度变化激烈的对象来说对象来说 ,抽象定义也是不稳定的。这时候,如果想尽,抽象定义也是不稳定的。这时候,如果想尽可能付出小的代价,获得最大的扩展,就可以采用桥接可能付出小的代价,获得最大的扩展,就可以采用桥接模式。模式。 桥接模式涉及的角色如下桥接模式涉及的角色如下: 第第10章章 面向对象设计面向对象设计59抽象抽象(Abstraction)对象:抽象对象给出的定义,

48、并保存一个对象实现对象:抽象对象给出的定义,并保存一个对象实现者者(Implementor)对象的引用对象的引用精化精化(RefinedAbstraction)抽象:扩展抽象对象,改变和修正父类对抽抽象:扩展抽象对象,改变和修正父类对抽象的定义。象的定义。实现者实现者(Implementor)对象:给出实现者对象的接口,但不给出具体对象:给出实现者对象的接口,但不给出具体的实现方法。的实现方法。具体实现具体实现(Concrete Implementor):给出实现者对象接口的实现方法。给出实现者对象接口的实现方法。第第10章章 面向对象设计面向对象设计604代理模式代理模式 代理模式就是为其他

49、对象提供一种代理以控制对这个对象的代理模式就是为其他对象提供一种代理以控制对这个对象的访问。就是,在一些情况下客户不想或者不能直接引用一个访问。就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服去掉客户不能看到的内容和服务或者增添客户需要的额外服务。常见的代理:务。常见的代理: 远程代理:为一个对象在不同的地址空间提供局部代理。远程代理:为一个对象在不同的地址空间提供局部代理。 虚拟代理:根据需要创建开销很大的对象。虚拟代理:根据需要创建开

50、销很大的对象。 保护代理:控制对原始对象的访问,用于对象应该有不同的保护代理:控制对原始对象的访问,用于对象应该有不同的访问权限时。访问权限时。 智能引用:取代了简单的指针,在访问对象时执行了一些附智能引用:取代了简单的指针,在访问对象时执行了一些附加操作。加操作。第第10章章 面向对象设计面向对象设计61如图所示,客户对象如图所示,客户对象(Client)向一个作为接口的向一个作为接口的Subject发出请求,发出请求,Subject接口的实施代理对象接口的实施代理对象Proxy根据请求的种类,在适当的时候根据请求的种类,在适当的时候向向RealSubject转发请求。转发请求。代理模式的参

51、与者如下:代理模式的参与者如下:n 客户对象(Client):向一个作为接口的Subject发出请求。n 代理对象(Proxy):保存一个引用使其可以访问实体。n 抽象类(Subject):定义实体目标对象RealSubject和代理对象Proxy的共用接口,这样就允许在任何使用RealSubject的地方都可以使用Proxy。n 实体目标对象(RealSubject):定义代理对象Proxy所代表的实体。第第10章章 面向对象设计面向对象设计625 5适配器模式适配器模式 适配器适配器(Adapter)(Adapter)模式又叫包装模式又叫包装(Wrapper)(Wrapper)模式,指把一

52、个类的接口模式,指把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。在一起工作的两个类能够在一起工作。 适配器模式有类适配器和对象适配器两种。类适配器使用多重继承适配器模式有类适配器和对象适配器两种。类适配器使用多重继承使一个接口与另一个接口进行匹配,类适配器模式如下图所示。由使一个接口与另一个接口进行匹配,类适配器模式如下图所示。由图可看出,类图可看出,类AdapteeAdaptee类没有类没有requestrequest方法,而客户期待这个方法。方法,而客户期待这个方法。为了是

53、客户能够使用为了是客户能够使用AdapteeAdaptee类,提供一个中间环节,即类,提供一个中间环节,即AdapterAdapter类,类,AdapterAdapter类实现了类实现了TargetTarget接口,并继承自接口,并继承自AdapteeAdaptee类,类,AdapterAdapter类的类的RequestRequest方法重新封装了方法重新封装了AdapteeAdaptee的的specificRequestspecificRequest方法,实现了方法,实现了适配的目的。因为适配的目的。因为AdapterAdapter和和AdapteeAdaptee是继承关系,所以决定了这个

54、是继承关系,所以决定了这个适配器模式是类的。类适配器模式所涉及的参与者包括:适配器模式是类的。类适配器模式所涉及的参与者包括:n 目标(Target):客户端所期待的接口。n 源(Adaptee):需要适配的类。n 适配器(Adapter):把源接口转换成目标接口,它必须是类。 第第10章章 面向对象设计面向对象设计63类适配器模式类适配器模式第第10章章 面向对象设计面向对象设计64 对象适配器依赖于对象组合,如下图所示。对象适配器依赖于对象组合,如下图所示。 从图中可以看出:客户端需要调用从图中可以看出:客户端需要调用request方法,而方法,而Adaptee没有该方法,为了使客户端能够

55、使用没有该方法,为了使客户端能够使用Adaptee类,需要提供一个包装类,需要提供一个包装(Wrapper)类类Adapter。这个类。这个类包装了一个包装了一个Adaptee类的实例,从而将客户端与类的实例,从而将客户端与Adaptee衔接起来。由于衔接起来。由于Adapter与与Adaptee是委派关系,是委派关系,从而决定了这个适配器模式是对象的。该适配器模式从而决定了这个适配器模式是对象的。该适配器模式所涉及的参与者包括:所涉及的参与者包括: 目标目标(Target):客户所期待的接口。:客户所期待的接口。 源源(Adaptee):是需要适配的类。:是需要适配的类。 适配器适配器(Ad

56、apter):通过内部包装一个:通过内部包装一个Adapter对象,把对象,把源接口转换成目标接口。源接口转换成目标接口。第第10章章 面向对象设计面向对象设计65对象适配器模式对象适配器模式第第10章章 面向对象设计面向对象设计6610.3 设计模式 1.调停者模式调停者模式 通常,面向对象应用程序是由一组为了提供某种服务而彼此交互通常,面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成,这组对象叫同事对象。当彼此引用的对象数量比较的对象组成,这组对象叫同事对象。当彼此引用的对象数量比较少时,此时对象之间就为直接交互。当对象的数量增加时,这种少时,此时对象之间就为直接交互。当对象的

57、数量增加时,这种直接交互会导致对象之间复杂的、混乱的引用。这就会影响应用直接交互会导致对象之间复杂的、混乱的引用。这就会影响应用程序的可维护性。同时,因为对象之间的高耦合,当一个对象直程序的可维护性。同时,因为对象之间的高耦合,当一个对象直接引用其他的对象时,缩小了这些对象的复用范围。接引用其他的对象时,缩小了这些对象的复用范围。调停者模式推荐抽象所有同事对象交互的细节到一个独立的类,调停者模式推荐抽象所有同事对象交互的细节到一个独立的类,这个类就是调停者,它负责这组对象之间的交互。这组对象中的这个类就是调停者,它负责这组对象之间的交互。这组对象中的每一个对象仍然负责提供它所具有的服务,但为了

58、提供服务,对每一个对象仍然负责提供它所具有的服务,但为了提供服务,对象之间不能直接彼此交互。两个不同对象之间的交互通过调停者象之间不能直接彼此交互。两个不同对象之间的交互通过调停者进行路由。所有的对象把消息发送给调停者。调停者依据应用程进行路由。所有的对象把消息发送给调停者。调停者依据应用程序的需求把消息再发送给相应的对象。序的需求把消息再发送给相应的对象。第第10章章 面向对象设计面向对象设计67如图所示如图所示:调停者模式的参与者如下:调停者模式的参与者如下: 调停者:调停者定义一个接口用于与各同事对象进行通信调停者:调停者定义一个接口用于与各同事对象进行通信 具体调停者:具体调停者通协调

59、各同事对象实现协作行为,具体调停者:具体调停者通协调各同事对象实现协作行为,了解并维护它的各个同事。了解并维护它的各个同事。 同事类:同事类定义出调停者到同事对象的接口。同事类:同事类定义出调停者到同事对象的接口。 具体同事类:每一个具体同事类都知道它的调停者对象,具体同事类:每一个具体同事类都知道它的调停者对象,在需要与其他同事通信时,仅仅与它的调停者进行通信。在需要与其他同事通信时,仅仅与它的调停者进行通信。第第10章章 面向对象设计面向对象设计682策略模式策略模式 策略模式是针对一组算法,将每一个算法策略模式是针对一组算法,将每一个算法(策略策略)封装到具封装到具有共同接口的独立类中,

60、使得他们可以相互替换。有共同接口的独立类中,使得他们可以相互替换。 策略模式是对算法的包装,是将使用算法的责任和算法本策略模式是对算法的包装,是将使用算法的责任和算法本身分割开,委派给不同的对象进行管理。策略模式可以把身分割开,委派给不同的对象进行管理。策略模式可以把行为和环境分开。其中,环境类负责维持和查询行为类,行为和环境分开。其中,环境类负责维持和查询行为类,而各种算法在具体策略类中提供。这样算法的增减和修改而各种算法在具体策略类中提供。这样算法的增减和修改都不会影响环境和客户端。当出现需求变化时,只需要实都不会影响环境和客户端。当出现需求变化时,只需要实现新的策略类,并在客户端登记即可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论