软件设计模式的选择与实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计模式的种类日益增多,相对于Gang of Four (GoF) 于 1995年提出的23种通用的设计模式,设计模式的数量已经大大 增加了。要从如此多的模式中选择适合自己系统的模式并非易 事,选择正确、恰当的模式成为人们使用模式的瓶颈,尤其是 对于模式不够熟悉的用户。因此,寻找一种简易有效的模式选 择方法对于使用模式的用户来说非常重要。
的好处,需要根据实际情况,进行正确的模式选择。选择模式 的方法很多,特别是随着对设计模式研究的广泛开展,越来越 多的模式被发现,人们也开始寻找自动获取模式的方法,但还 不成熟。在目前的实际工作当中,人们仍然采用传统的模式选 择方法,主要凭借对设计模式功能的理解和自身的设计经验。 这要求设计人员对所有设计模式都有较深的理解和掌握。然
软件业的发展不仅要求软件有更高的生产率和可靠性,而 且对软件的可重用性和可维护性也提出了更高的要求。设计模 式以文档的形式把面向对象的软件设计经验记录下来,并予以 系统的命名、解释和评价,使开发人员在进行系统的设计与开 发时,可以使用别人的成功经验而不必为普通的、重复的问题 重新设计解决方案,使设计者更容易理解其设计思路,能为自 己的问题找到更合适的解决办法,帮助设计者更快更好地完成 系统设计。
important to bring them into play. This paper, beginning with basic conception of mode, discusses in detail how to correctly select method to design
pattern . It also discusses the implementation of pattern selecting in the plan-track system as an example. 【Key words】Design pattern; Pattern selecting; Plan-track system
从模式的分类角度看,职责链模式和命令模式都属于对象 的行为模式,它们之间有一些共性:(1)它们都提供请求的发送 者和接收者之间解耦合的功能;(2)二者都可以在编译时刻或运 行时刻改变相应请求。但是二者的意图(即所要解决的设计问 题)和使用条件各不相同:
(1)从意图来讲,职责链模式解决的是使多个对象都有机会处理请 求,从而避免请求的发送者和接收者之间的耦合关系;而命令模式是 将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数 化,对请求排列或记录请求日志以及支持可撤销的操作。
Selection and Realization for Software Design Patterns
ZOU Juan, TIAN Yumin
( Research Institute of Peripherals, Xidian University, Xi'an 710071) 【 Abstract 】Design patterns are successful design examples which people summarized in practice. How to correctly select and use these patterns is
考虑实际系统客户端的情况,对于计划追踪系统,用户通 常进行的操作是对计划信息的添加、删除、修改、查询等。由 于计划追踪系统实属ERP的模块,一个不确定的处理结果显然 是客户无法接受的,根据这一特点,职责链模式就无法满足。 而对于命令模式很容易通过对请求的封装来完成所需的操作, 同时也容易扩展,例如:如果需要根据某一条件对多个计划进 行查询,只需增加一个具体的命令对象就能实现。另外,命令 模式可以与合成模式(Composite)结合使用合成宏命令,与备忘 录模式(Memento)一起使用来完成命令模式所支持的撤销(undo) 和恢复(redo)功能。根据以上分析,可以确定使用命令模式来 实现系统“客户端”的功能。 2.3 设计模式的实现
每个设计模式都有统一的描述,以利于其他人使用,实现 资源共享。模式的描述形式通常分为两类:一类是经典的自然
语言结合OO框图的非形式化描述形式,一类是形式化描述。 目前通常采用GoF的非形式化描述形式,包括标题和详述。一 个模式描述通常要求包括如下信息:
(1)模式名称:每个模式都有唯一的名称,用于简述模式的本质。 人们通过模式名称来鉴别模式;
模式是良好设计方案的总结,然而在设计中也会发现一些 不好的设计方法,这就是反模式。反模式表示的是不可行方案 或用到错误情境中的方案。尽快表示错误有利于减少项目的风 险,因此了解反模式对于每个设计人员也非常重要,它有助于 防止在自己的设计中犯同样的错误。
2 设计模式的选择与实现
2.1 设计模式选择方法 使用设计模式能给设计人员带来很多好处,而要得到这样
作 者 简 介 :邹 娟(1976-),女,硕士生,主要研究方向为图形图
像处理;田玉敏,教授
收 稿 日 期 : 2003-05-12
E-mail: sophy.zou@fa-software.com
—79—
而,对于模式选择方法的介绍,大多是基于单个方法的,并没 有对方法间的联系加以阐述,容易导致人们孤立地看待问题, 不便于使用。我们通过对已有的模式选择方法加以总结、归 纳、简化并把它们联系起来,发现在选择模式时基本可以遵循 以下的步骤和原则:
通常,一个具体应用按大的层次来分,可以分为“客户 端”和“服务端”两大层。在一个系统中,“客户端”的作用 是接收客户的请求,并把请求传给“服务端”进行处理。实际 上这是一个事件驱动模型,客户的每个请求都是一个事件,通 过“客户端”把请求传入“服务端”,至于具体怎么传递,应 该是一个动态的过程,客户无须知晓。据经验分析,目前用于 “ 客 户 端 ” 处 理 请 求 的 主 要 模 式 是 职 责 链 模 式 (Chain of Responsibility)和命令模式(Command)。这样,就从众多的模式 中找出了可能符合系统需求的模式组。在这里组内只有这两种 模式。 2.2.2组内模式研究
(2)从使用条件来讲,职责链模式通常适用于以下条件:1)多个对 象可以处理一个请求,哪个对象处理该请求由运行时刻自动决定;2) 在不明确指定接受者的情况下,向多个对象中的一个提交一个请求; 3)可处理一个请求的对象集合被动态指定。而命令模式通常在以下条 件使用:1)使用命令模式作为“回呼”面向对象系统中的替代;2)在 不同的时刻制定、排列和执行请求;3)支持取消操作;4)支持修改日
1 设计模式概述
设计模式是针对面向对象系统中重复出现的问题而提出来 的。有经验的面向对象专家在解决问题时,通常先考虑以前解 决过的相似问题,并重用其解法的精华来解决问题,这个不断 被引用的解法就是通常说的设计模式。
设计模式的历程并不长,但它已日渐成为软件工程研究的 重要方向,是软件学科中的一个新领域。模式最早出自建筑大 师Christopher Alexander的关于城市规划和建筑设计的著作中。 目前,设计模式还没有统一的定义,大多数都采用建筑大师 Christopher Alexander对模式的定义,他曾在其著作中指出: “每一个模式描述了一个在我们周围不断重复发生的问题,以 及该问题的解决方案的核心。这样,你就能一次又一次地使用 该方案而不必做重复劳动。”该定义的核心在于提供一个相关 问题的解决方案,使人们避免了不必要的重复劳动。在软件设 计中,也会有不断重复出现的问题,因此该思想同样适用于软 件行业。可以简单地认为,设计模式就是解决某个特定的面向 对象软件问题的特定方法。
第30卷 第10期 Vol.30 № 10 · 软件技术与数据库·
计 算 机 工 程 Computer Engineering
文章编号:1000—3428(2004)10 —0079—03
文献标识码:A
2004年5月 May 2004
中图分类号:TP 311
软件设计模式的选择与实现
邹 娟,Βιβλιοθήκη Baidu玉敏
(西安电子科技大学计算机外部设备研究所,西安 710071) 摘 要 :设计模式是人们在实践过程中总结出来的成功设计范例,它的正确选择和使用是发挥模式作用的关键。该文从模式的基本概念入 手,详细讨论了选择设计模式的正确方法,并结合实例讨论了模式选择方法在计划追踪系统中的具体实现。 关键词:设计模式;模式选择;计划追踪系统
根据以上3步的筛选就能选出符合需求的设计模式。通过 在计划追踪系统的设计开发中的应用,说明这是一个行之有效 的模式选择方法。 2.2 设计模式选择方法的使用
任意一个需求,都有可能牵涉到多个特定的问题领域,而 每一种设计模式都有其特定的意图和目的,因此一个实际的应 用通常需要使用多种模式。计划追踪系统是ERP系统的一个子 系统,主要给用户提供计划信息的维护,对计划的执行情况进 行跟踪和对计划进行考核等功能。为了提高系统的可 扩 展 性 和 可 维 护 性 , 我 们 在 系 统 中 使 用 了 单 例 模 式 (Singleton)、 工 厂 方 法 (Factory Method) 、 代 理 模 式 (Proxy) 、 DAO(Data Access Object)、命令模式(Command)等大量的设计模式,每种 设计模式都通过相关的筛选而获得。下面以选择命令模式为例 来说明如何根据实际问题选择正确的模式。 2.2.1 理解问题需求
从以上分析可以看出,职责链模式和命令模式都提供了为 请求的发送者和接收者之间的解耦功能,但是两者的处理方式 截然不同:职责链模式将多个对象连成一条链,请求在多个对 象中传递,具体被谁处理请求,发送者无法知道而由运行时刻 决定,此模式所支持的变化是系统中可以增加多个满足一个请 求的对象。而命令模式把请求封装成一个对象,把请求操作的 对象和执行操作的对象分离,它能支持的变化是可以很容易地 增加一个新的对象来满足新的请求,而不会影响对已有请求的 处理。
—80—
志;5)用构建在原语操作上的高层操作构造一个子系统。
同时两种模式各有其优缺点: 在职责链模式中,由于有 多个对象处理同一个请求,每个对象仅需要一个后继对象的引 用而不是所有候选者的引用,从而减少了对象的相互连接,具 体处理请求的对象由运行时刻或根据上下文来决定,这样处理 增加了系统处理的灵活性,但是每个请求发出后,需在一批已 提供的处理者中逐个挑选出合适的处理者进行处理,这样大大 降低了系统的性能。而命令模式通过把请求封装成一个对象, 请求的发送者对象是对命令对象进行引用而不是对接收者对象 的引用,请求方不必知道接收方的接口,也不必知道接收方的 具体实现,从而减少了请求发送者和接收者对象之间的耦合, 但是在命令模式中由于对每个具体请求都要进行封装,可能会 导致系统中有很多的具体命令类。 2.2.3对模式解决涉及问题 的考虑
(2)意图:描述设计模式解决什么样的特定设计问题及其基本 原 理;
(3)解决方案:这是设计模式的核心。描述模式在自己出现的情境 中怎样提供一个解决方案;
(4)参与者:即模式包括的实体,指模式中的类或对象及其各自的 职责;
(5)协作:模式的参与者之间如何协调完成他们的职责; (6)效果:使用模式的优点和存在的不足; (7)实现:指怎样实现模式,是模式的具体表现形式,实现同一模 式的方法通常会有很多种; (8)相关模式:与模式紧密相关的其他模式,它们可能在很大程度 上有相似之处,或者可以相互补充。
(1)理解问题需求:需求是模式选择的基础,通过对需求的分析可 以找到多个模式,形成模式组;
(2)研究组内模式:需求分析得出的组内模式有一些共性,但是每 种模式都有其特殊的意图、使用动机和使用条件,因此需要对组内模 式进行研究;
(3)考虑设计模式如何解决设计问题:在此过程中,主要考虑设计 模式在设计中所支持的可变化因素,即确定改变什么而不需重新设 计,根据这一点可以找到所需的设计模式。此外考虑与其相关的设计 模式。
的好处,需要根据实际情况,进行正确的模式选择。选择模式 的方法很多,特别是随着对设计模式研究的广泛开展,越来越 多的模式被发现,人们也开始寻找自动获取模式的方法,但还 不成熟。在目前的实际工作当中,人们仍然采用传统的模式选 择方法,主要凭借对设计模式功能的理解和自身的设计经验。 这要求设计人员对所有设计模式都有较深的理解和掌握。然
软件业的发展不仅要求软件有更高的生产率和可靠性,而 且对软件的可重用性和可维护性也提出了更高的要求。设计模 式以文档的形式把面向对象的软件设计经验记录下来,并予以 系统的命名、解释和评价,使开发人员在进行系统的设计与开 发时,可以使用别人的成功经验而不必为普通的、重复的问题 重新设计解决方案,使设计者更容易理解其设计思路,能为自 己的问题找到更合适的解决办法,帮助设计者更快更好地完成 系统设计。
important to bring them into play. This paper, beginning with basic conception of mode, discusses in detail how to correctly select method to design
pattern . It also discusses the implementation of pattern selecting in the plan-track system as an example. 【Key words】Design pattern; Pattern selecting; Plan-track system
从模式的分类角度看,职责链模式和命令模式都属于对象 的行为模式,它们之间有一些共性:(1)它们都提供请求的发送 者和接收者之间解耦合的功能;(2)二者都可以在编译时刻或运 行时刻改变相应请求。但是二者的意图(即所要解决的设计问 题)和使用条件各不相同:
(1)从意图来讲,职责链模式解决的是使多个对象都有机会处理请 求,从而避免请求的发送者和接收者之间的耦合关系;而命令模式是 将一个请求封装成一个对象,从而可以用不同的请求对客户进行参数 化,对请求排列或记录请求日志以及支持可撤销的操作。
Selection and Realization for Software Design Patterns
ZOU Juan, TIAN Yumin
( Research Institute of Peripherals, Xidian University, Xi'an 710071) 【 Abstract 】Design patterns are successful design examples which people summarized in practice. How to correctly select and use these patterns is
考虑实际系统客户端的情况,对于计划追踪系统,用户通 常进行的操作是对计划信息的添加、删除、修改、查询等。由 于计划追踪系统实属ERP的模块,一个不确定的处理结果显然 是客户无法接受的,根据这一特点,职责链模式就无法满足。 而对于命令模式很容易通过对请求的封装来完成所需的操作, 同时也容易扩展,例如:如果需要根据某一条件对多个计划进 行查询,只需增加一个具体的命令对象就能实现。另外,命令 模式可以与合成模式(Composite)结合使用合成宏命令,与备忘 录模式(Memento)一起使用来完成命令模式所支持的撤销(undo) 和恢复(redo)功能。根据以上分析,可以确定使用命令模式来 实现系统“客户端”的功能。 2.3 设计模式的实现
每个设计模式都有统一的描述,以利于其他人使用,实现 资源共享。模式的描述形式通常分为两类:一类是经典的自然
语言结合OO框图的非形式化描述形式,一类是形式化描述。 目前通常采用GoF的非形式化描述形式,包括标题和详述。一 个模式描述通常要求包括如下信息:
(1)模式名称:每个模式都有唯一的名称,用于简述模式的本质。 人们通过模式名称来鉴别模式;
模式是良好设计方案的总结,然而在设计中也会发现一些 不好的设计方法,这就是反模式。反模式表示的是不可行方案 或用到错误情境中的方案。尽快表示错误有利于减少项目的风 险,因此了解反模式对于每个设计人员也非常重要,它有助于 防止在自己的设计中犯同样的错误。
2 设计模式的选择与实现
2.1 设计模式选择方法 使用设计模式能给设计人员带来很多好处,而要得到这样
作 者 简 介 :邹 娟(1976-),女,硕士生,主要研究方向为图形图
像处理;田玉敏,教授
收 稿 日 期 : 2003-05-12
E-mail: sophy.zou@fa-software.com
—79—
而,对于模式选择方法的介绍,大多是基于单个方法的,并没 有对方法间的联系加以阐述,容易导致人们孤立地看待问题, 不便于使用。我们通过对已有的模式选择方法加以总结、归 纳、简化并把它们联系起来,发现在选择模式时基本可以遵循 以下的步骤和原则:
通常,一个具体应用按大的层次来分,可以分为“客户 端”和“服务端”两大层。在一个系统中,“客户端”的作用 是接收客户的请求,并把请求传给“服务端”进行处理。实际 上这是一个事件驱动模型,客户的每个请求都是一个事件,通 过“客户端”把请求传入“服务端”,至于具体怎么传递,应 该是一个动态的过程,客户无须知晓。据经验分析,目前用于 “ 客 户 端 ” 处 理 请 求 的 主 要 模 式 是 职 责 链 模 式 (Chain of Responsibility)和命令模式(Command)。这样,就从众多的模式 中找出了可能符合系统需求的模式组。在这里组内只有这两种 模式。 2.2.2组内模式研究
(2)从使用条件来讲,职责链模式通常适用于以下条件:1)多个对 象可以处理一个请求,哪个对象处理该请求由运行时刻自动决定;2) 在不明确指定接受者的情况下,向多个对象中的一个提交一个请求; 3)可处理一个请求的对象集合被动态指定。而命令模式通常在以下条 件使用:1)使用命令模式作为“回呼”面向对象系统中的替代;2)在 不同的时刻制定、排列和执行请求;3)支持取消操作;4)支持修改日
1 设计模式概述
设计模式是针对面向对象系统中重复出现的问题而提出来 的。有经验的面向对象专家在解决问题时,通常先考虑以前解 决过的相似问题,并重用其解法的精华来解决问题,这个不断 被引用的解法就是通常说的设计模式。
设计模式的历程并不长,但它已日渐成为软件工程研究的 重要方向,是软件学科中的一个新领域。模式最早出自建筑大 师Christopher Alexander的关于城市规划和建筑设计的著作中。 目前,设计模式还没有统一的定义,大多数都采用建筑大师 Christopher Alexander对模式的定义,他曾在其著作中指出: “每一个模式描述了一个在我们周围不断重复发生的问题,以 及该问题的解决方案的核心。这样,你就能一次又一次地使用 该方案而不必做重复劳动。”该定义的核心在于提供一个相关 问题的解决方案,使人们避免了不必要的重复劳动。在软件设 计中,也会有不断重复出现的问题,因此该思想同样适用于软 件行业。可以简单地认为,设计模式就是解决某个特定的面向 对象软件问题的特定方法。
第30卷 第10期 Vol.30 № 10 · 软件技术与数据库·
计 算 机 工 程 Computer Engineering
文章编号:1000—3428(2004)10 —0079—03
文献标识码:A
2004年5月 May 2004
中图分类号:TP 311
软件设计模式的选择与实现
邹 娟,Βιβλιοθήκη Baidu玉敏
(西安电子科技大学计算机外部设备研究所,西安 710071) 摘 要 :设计模式是人们在实践过程中总结出来的成功设计范例,它的正确选择和使用是发挥模式作用的关键。该文从模式的基本概念入 手,详细讨论了选择设计模式的正确方法,并结合实例讨论了模式选择方法在计划追踪系统中的具体实现。 关键词:设计模式;模式选择;计划追踪系统
根据以上3步的筛选就能选出符合需求的设计模式。通过 在计划追踪系统的设计开发中的应用,说明这是一个行之有效 的模式选择方法。 2.2 设计模式选择方法的使用
任意一个需求,都有可能牵涉到多个特定的问题领域,而 每一种设计模式都有其特定的意图和目的,因此一个实际的应 用通常需要使用多种模式。计划追踪系统是ERP系统的一个子 系统,主要给用户提供计划信息的维护,对计划的执行情况进 行跟踪和对计划进行考核等功能。为了提高系统的可 扩 展 性 和 可 维 护 性 , 我 们 在 系 统 中 使 用 了 单 例 模 式 (Singleton)、 工 厂 方 法 (Factory Method) 、 代 理 模 式 (Proxy) 、 DAO(Data Access Object)、命令模式(Command)等大量的设计模式,每种 设计模式都通过相关的筛选而获得。下面以选择命令模式为例 来说明如何根据实际问题选择正确的模式。 2.2.1 理解问题需求
从以上分析可以看出,职责链模式和命令模式都提供了为 请求的发送者和接收者之间的解耦功能,但是两者的处理方式 截然不同:职责链模式将多个对象连成一条链,请求在多个对 象中传递,具体被谁处理请求,发送者无法知道而由运行时刻 决定,此模式所支持的变化是系统中可以增加多个满足一个请 求的对象。而命令模式把请求封装成一个对象,把请求操作的 对象和执行操作的对象分离,它能支持的变化是可以很容易地 增加一个新的对象来满足新的请求,而不会影响对已有请求的 处理。
—80—
志;5)用构建在原语操作上的高层操作构造一个子系统。
同时两种模式各有其优缺点: 在职责链模式中,由于有 多个对象处理同一个请求,每个对象仅需要一个后继对象的引 用而不是所有候选者的引用,从而减少了对象的相互连接,具 体处理请求的对象由运行时刻或根据上下文来决定,这样处理 增加了系统处理的灵活性,但是每个请求发出后,需在一批已 提供的处理者中逐个挑选出合适的处理者进行处理,这样大大 降低了系统的性能。而命令模式通过把请求封装成一个对象, 请求的发送者对象是对命令对象进行引用而不是对接收者对象 的引用,请求方不必知道接收方的接口,也不必知道接收方的 具体实现,从而减少了请求发送者和接收者对象之间的耦合, 但是在命令模式中由于对每个具体请求都要进行封装,可能会 导致系统中有很多的具体命令类。 2.2.3对模式解决涉及问题 的考虑
(2)意图:描述设计模式解决什么样的特定设计问题及其基本 原 理;
(3)解决方案:这是设计模式的核心。描述模式在自己出现的情境 中怎样提供一个解决方案;
(4)参与者:即模式包括的实体,指模式中的类或对象及其各自的 职责;
(5)协作:模式的参与者之间如何协调完成他们的职责; (6)效果:使用模式的优点和存在的不足; (7)实现:指怎样实现模式,是模式的具体表现形式,实现同一模 式的方法通常会有很多种; (8)相关模式:与模式紧密相关的其他模式,它们可能在很大程度 上有相似之处,或者可以相互补充。
(1)理解问题需求:需求是模式选择的基础,通过对需求的分析可 以找到多个模式,形成模式组;
(2)研究组内模式:需求分析得出的组内模式有一些共性,但是每 种模式都有其特殊的意图、使用动机和使用条件,因此需要对组内模 式进行研究;
(3)考虑设计模式如何解决设计问题:在此过程中,主要考虑设计 模式在设计中所支持的可变化因素,即确定改变什么而不需重新设 计,根据这一点可以找到所需的设计模式。此外考虑与其相关的设计 模式。