软件设计模式系列之一 什么是设计模式(二)

上篇介绍了设计模式的基本概念,这篇主要介绍一下设计模式具体有什么呢?

一、设计模式的基本成分。

◎ 模式名称 

       一个助记名,它用一两个词来描述模式的问题、解决方案和效果。

       设计模式允许在较高的抽象层次上进行设计。

       基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。

       模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。

◎ 问题 

       描述了应该在何时使用模式。

       它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。

       也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。

◎ 解决方案 

       描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。

       因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。

◎ 后果(效果)

       描述了模式应用的效果及使用模式应权衡的问题。

       尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。

二、设计模式的描述

        设计模式的描述有13个。

(1)模式名称和分类

          模式名简洁地描述了模式的本质。一个好的名字非常重要,因为它将成为你的设计词汇表中的一部分。

(2)目的(意图)

          是回答下列问题的简单陈述:设计模式是做什么的?它的基本原理和意图是什么?它解决的是什么样的特定设计问题?

(3)别名

          顾名思义,模式的其他名称。

(4)动机

          用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。

(5)应用

          什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?你怎样识别这些情况? 

(6)结构

          采用基于对象建模技术的表示法对模式中的类进行图形描述。

(7)成分(参与者)

          指设计模式中的类和/或对象以及它们各自的职责。

(8)合作(协作)

          模式的成分(参与者)怎样协作以实现它们的职责。

(9)后果(效果)    

          模式怎样支持它的目标?使用模式的效果和所需做的权衡取舍?系统结构的哪些方面可以独立改变?

(10)实现

             实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。

(11)例程代码 

            用来说明怎样用语言实现该模式的代码片段。

(12)已知的应用

            实际系统中发现的模式的例子。每个模式至少包括了两个不同领域的实例。

(13)相关模式

            与这个模式紧密相关的模式有哪些?其间重要的不同之处是什么?这个模式应与哪些其他模式一起使用? 

三、设计模式方法分类 

1Coad的面向对象模式

        1992年,美国的面向对象技术的大师Peter CoadMVC的角度对面向对象系统进行了讨论,设计模式由最底层的构成部分(类和对象)及其关系来区分。他使用了一种通用的方式来描述一种设计模式:

1)模式所能解决问题的简要介绍与讨论;

2)模式的非形式文本描述以及图形表示;

3)模式的使用方针:在何时使用以及能够与哪些模式结合使用。

分类:

1)基本的继承和交互模式:主要包括OOPL(object-oriented programming language面向对象程序设计语言)所提供的基本建模功能,继承模式声明了一个类能够在其子类中被修改或被补充,交互模式描述了在有多个类的情况下消息的传递。

2)面向对象软件系统的结构化模式:描述了在适当情况下,一组类如何支持面向对象软件系统结构的建模。

3)与MVC框架相关的模式。

        几乎所有Coad提出的模式都指明如何构造面向对象软件系统,有助于设计单个的或者一小组构件,描述了MVC框架的各个方面。但是,他没有重视抽象类和框架,没有说明如何改造框架。

2、代码模式

        代码模式的抽象方式与OOPL中的代码规范很相似,该类模式有助于解决某种面向对象程序设计语言中的特定问题。主要目标在于:

1)指明结合基本语言概念的可用方式;

2)构成源码结构与命名规范的基础;

3)避免面向对象程序设计语言(尤其是C++语言)的缺陷。

        代码模式与具体的程序设计语言或者类库有关,它们主要从语法的角度对于软件系统的结构方面提供一些基本的规范。

        这些模式对于类的设计不适用,同时也不支持程序员开发和应用框架,命名规范是类库中的名字标准化的基本方法,以免在使用类库时产生混淆。

3、框架应用模式

       在应用程序框架“菜谱”中有很多“菜谱条”,它们用一种不很规范的方式描述了如何应用框架来解决特定的问题。程序员将框架作为应用程序开发的基础,特定的框架适用于特定的需求。“菜谱条”通常并不讲解框架的内部设计实现,只讲如何使用。

不同的框架有各自的“菜谱”。

4、形式合约

        形式合约也是一种描述框架设计的方法,强调组成框架的对象间的交互关系。有人认为它是面向交互的设计,对其他方法的发展有启迪作用。但形式化方法由于其过于抽象,而有很大的局限性,仅仅在小规模程序中使用。

优点:

1)符号所包含的元素很少,并且其中引入的概念能够被映射成为面向对象程序设计语言中的概念。例如,参与者映射成为对象。

2)形式合约中考虑到了复杂行为是由简单行为组成的事实,合约的修订和扩充操作使得这种方法很灵活,易于应用。

缺点:

1)在某些情况下很难用,过于繁琐。若引入新的符号,则又使符号系统复杂化。

2)强制性地要求过分精密,从而在说明中可能发生隐患(例如冗余)。

3)形式合约的抽象程度过低,接近面向对象的程序设计语言,不易分清主次。

四、设计模式分类

1.根据目的准则分类

        即模式是用来完成什么工作的。模式依据其目的可分为创建型(Creational)、结构型(Structural)、或行为型(Behavioral)三种。

创建型模式与对象的创建有关;

结构型模式处理类或对象的组合;

行为型模式对类或对象怎样交互和怎样分配职责进行描述。

2.根据范围准则分类

       指定模式主要是用于类还是用于对象。

       类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。

对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。

从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。

 设计模式的简介就先给大家介绍到这里,从下面的博文开始,我们将开始进入GoF的23种设计模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值