第1章 设计模式概述_第1页
第1章 设计模式概述_第2页
第1章 设计模式概述_第3页
第1章 设计模式概述_第4页
第1章 设计模式概述_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、常文萃常文萃*设计模式的诞生与发展设计模式的诞生与发展 *设计模式的定义与分类设计模式的定义与分类 *GoF设计模式简介设计模式简介 *设计模式的优点设计模式的优点 *模式的诞生与定义模式的诞生与定义 *模式起源于建筑业而非软件业模式起源于建筑业而非软件业*模式模式(Pattern)(Pattern)之父之父美国加利佛尼亚大学环境结构中心研究所所美国加利佛尼亚大学环境结构中心研究所所长长Christopher AlexanderChristopher Alexander博士博士*A Pattern Language: Towns, Buildings, ConstructionA Patter

2、n Language: Towns, Buildings, Construction253253个建筑和城市规划模式个建筑和城市规划模式Christopher Alexanderw 模式的诞生与定义模式的诞生与定义 AlexanderAlexander给出了关于模式的经典定义:每个模式给出了关于模式的经典定义:每个模式都描述了一个都描述了一个在我们的环境中不断出现的问题在我们的环境中不断出现的问题,然后描述了该问题的然后描述了该问题的解决方案解决方案的核心,通过这种的核心,通过这种方式,我们可以无数次地重用那些已有的解决方方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。案,

3、无需再重复相同的工作。 w 软件模式软件模式 19901990年,软件工程界开始关注年,软件工程界开始关注Christopher AlexanderChristopher Alexander等等在建在建筑与城市规划领域的重大突破,最早将该模式的思想引入软筑与城市规划领域的重大突破,最早将该模式的思想引入软件工程方法学的是件工程方法学的是1991-19921991-1992年以年以“四人组四人组( (Erich Erich Gamma, Gamma, Richard Helm, Ralph JohnsonRichard Helm, Ralph Johnson和和John John Vlissid

4、esVlissides)”)”自称的自称的四位著名软件工程学者,他们在四位著名软件工程学者,他们在19941994年归纳发表了年归纳发表了2323种在软种在软件开发中使用频率较高的设计模式,旨在件开发中使用频率较高的设计模式,旨在用模式来统一沟通用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟面向对象方法在分析、设计和实现间的鸿沟。Erich Gamma苏黎世大学计算机科学博士,是苏黎世大学计算机科学博士,是Eclipse、 JUnit 等项目主要技术负责人之一。等项目主要技术负责人之一。John Vlissides斯坦福大学计算机科学博士,斯坦福大学计算机科学博士,原原IBM研究员,于

5、研究员,于2005年年11月月24日因脑瘤日因脑瘤去世,享年去世,享年44岁。岁。Ralph Johnson 墨尔本大学计算机科学博士,原墨尔本大学计算机科学博士,原IBM 研究研究员,现在波士顿顾问集团供职。员,现在波士顿顾问集团供职。Richard Helm康奈尔大学计算机科学博士,康奈尔大学计算机科学博士,伊利诺伊大学教授。伊利诺伊大学教授。软件模式软件模式 软件模式是将模式的一般概念应用于软件开发领域,即软件模式是将模式的一般概念应用于软件开发领域,即软件软件开发的总体指导思路或参照样板开发的总体指导思路或参照样板。软件模式并非仅限于设计。软件模式并非仅限于设计模式,还包括架构模式、分

6、析模式和过程模式等。实际上,模式,还包括架构模式、分析模式和过程模式等。实际上,在软件生存期的每一个阶段都存在着一些被认同的模式在软件生存期的每一个阶段都存在着一些被认同的模式。 软件模式可以认为是软件模式可以认为是对软件开发这一特定对软件开发这一特定“问题问题”的的“解法解法”的某种统一表示的某种统一表示,它和,它和AlexanderAlexander所描述的模式定义完全相所描述的模式定义完全相同,即同,即软件模式等于一定条件下的出现的问题以及解法软件模式等于一定条件下的出现的问题以及解法。 设计模式的发展设计模式的发展 19871987年年,Kent BeckKent Beck和和Ward

7、 CunninghamWard Cunningham借鉴借鉴AlexanderAlexander的模式思想在程的模式思想在程序开发中开始应用一些模式序开发中开始应用一些模式 ,在,在OOPSLAOOPSLA会议上发表了他们的成果。会议上发表了他们的成果。19901990年年,OOPSLAOOPSLA与与ECOOPECOOP联合举办,联合举办,Erich GammaErich Gamma和和Richard HelmRichard Helm等人等人开始讨论有关模式的话题开始讨论有关模式的话题(Bruce Anderson(Bruce Anderson主持主持) ),“四人组四人组” ” 正式成正式

8、成立,并开始着手进行设计模式的分类整理工作。立,并开始着手进行设计模式的分类整理工作。 1991 1991 年年,OOPSLAOOPSLA,Bruce AndersonBruce Anderson主持了首次针对设计模式的研讨主持了首次针对设计模式的研讨会会 。1992 1992 年年,OOPSLA OOPSLA ,AndersonAnderson再度主持研讨会,模式已经逐渐成为人再度主持研讨会,模式已经逐渐成为人们讨论的话题。们讨论的话题。 *设计模式的发展设计模式的发展 *19931993年,年,Kent Beck Kent Beck 和和 Grady Grady BoochBooch 赞助

9、了第一次关于设计模式的赞助了第一次关于设计模式的会议,这个设计模式研究组织发展成为著名的会议,这个设计模式研究组织发展成为著名的Hillside GroupHillside Group研究研究组。组。*19941994 年,由年,由Hillside GroupHillside Group发起,在美发起,在美国召国召开了第开了第1 1届关于面向对届关于面向对象模式的世界性会象模式的世界性会议议编编程语言模式会程语言模式会议。议。*19951995年年,“四人组四人组”出版了出版了设计模式:可复用面向对象软件的基设计模式:可复用面向对象软件的基础础( (Design Patterns: Eleme

10、nts of Reusable Object-Oriented Design Patterns: Elements of Reusable Object-Oriented SoftwareSoftware) )一书,本书成为一书,本书成为19951995年最抢手的面向对象书籍,也成为设年最抢手的面向对象书籍,也成为设计模式的经典书籍。计模式的经典书籍。 *设计模式的发展设计模式的发展 *从从19951995年至今,设计模式在软件开发中得以广泛应用,在年至今,设计模式在软件开发中得以广泛应用,在SunSun的的Java Java SE/Java EESE/Java EE平台平台和和Microso

11、ftMicrosoft的的平台平台设计中就应用了大量的设计设计中就应用了大量的设计模式。模式。*诞生了越来越多的与设计模式相关的书籍和网站,设计模式也作为诞生了越来越多的与设计模式相关的书籍和网站,设计模式也作为一门独立的课程或作为软件体系结构等课程的重要组成部分出现在一门独立的课程或作为软件体系结构等课程的重要组成部分出现在国内外研究生和大学教育的课堂上。国内外研究生和大学教育的课堂上。*设计模式的定义设计模式的定义 *设计模式设计模式(Design Pattern)(Design Pattern)是一套是一套被反复使用、多数人知晓的、被反复使用、多数人知晓的、经过分类编目的、代码设计经验的

12、总结经过分类编目的、代码设计经验的总结,使用设计模式是为了可,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。重用代码、让代码更容易被他人理解、保证代码可靠性。*设计模式的基本要素设计模式的基本要素 *设计模式一般有如下几个基本要素:设计模式一般有如下几个基本要素:模式名称模式名称 (Pattern name) (Pattern name) 问题问题 (Problem) (Problem) 描述了应该在何时使用模式。描述了应该在何时使用模式。解决方案解决方案 (Solution) (Solution) 描述了设计的组成成分,描述了设计的组成成分,它们之间的相互关系及各自的

13、职责和协作方式。它们之间的相互关系及各自的职责和协作方式。效果效果 (Consequences) (Consequences) 包括包括模式模式对对系统的灵活性、系统的灵活性、扩充性或可移植性的扩充性或可移植性的影响影响。*设计模式学习步骤设计模式学习步骤 :问题提出问题提出问题分析问题分析 解决方案解决方案设计模式应用设计模式应用 设计模式的分类(一)设计模式的分类(一)根据目的可根据目的可分为创建分为创建型,结构型和型,结构型和行为行为型三型三种:种: 创建型模式主要用于创建型模式主要用于创建对象创建对象。 结构型模式主要用于结构型模式主要用于处理类或对象的组合处理类或对象的组合。 行为型

14、模式主要用于行为型模式主要用于描述对类或对象怎样交互和怎样分配职描述对类或对象怎样交互和怎样分配职责责。设计模式的分类(二)设计模式的分类(二)根据根据范围范围,即模式主要是用于处理类之间关系还是处理对象之间,即模式主要是用于处理类之间关系还是处理对象之间的关系,可分为的关系,可分为类模式类模式和和对象模式对象模式两种:两种:类模式类模式处理类和子类之间的关系处理类和子类之间的关系,这些关系通过继承建立,在,这些关系通过继承建立,在编译时刻就被确定下来,是属于编译时刻就被确定下来,是属于静态静态的。的。 对象模式对象模式处理对象间的关系处理对象间的关系,这些关系在运行时刻变化,更具,这些关系在

15、运行时刻变化,更具动态动态性。性。 范围范围目的目的创建型模式创建型模式结构型模式结构型模式行为型模式行为型模式类模式类模式工厂方法模式工厂方法模式(类)(类)适配器模式适配器模式解释器模式解释器模式模板方法模式模板方法模式对象模式对象模式抽象工厂模式抽象工厂模式建造者模式建造者模式原型模式原型模式单例模式单例模式(对象)适配器模式(对象)适配器模式桥接模式桥接模式组合模式组合模式装饰模式装饰模式外观模式外观模式享元模式享元模式代理模式代理模式职责链模式职责链模式命令模式命令模式迭代器模式迭代器模式中介者模式中介者模式备忘录模式备忘录模式观察者模式观察者模式状态模式状态模式策略模式策略模式访问

16、者模式访问者模式*设计模式是从许多优秀的软件系统中总结出的设计模式是从许多优秀的软件系统中总结出的成功的设计方案成功的设计方案,融合了众多融合了众多专家的经验专家的经验,并以一种,并以一种标准的形式标准的形式供广大开发人员所用,使得设计方案更加供广大开发人员所用,使得设计方案更加通俗易懂。通俗易懂。*设设计模式使人们可计模式使人们可以更加简单方便地复用成功的设计和体系结构以更加简单方便地复用成功的设计和体系结构,并,并避免那避免那些导致不可重用的设计方案。些导致不可重用的设计方案。*设计模式使得设计模式使得设计方案更加灵活,且易于修改设计方案更加灵活,且易于修改。能。能提提高软件系统的开发效率

17、高软件系统的开发效率和软件质量和软件质量,且在一定程度上,且在一定程度上节约设计成本节约设计成本。 *设计模式有助于初学者更深入地理解面向对象思想设计模式有助于初学者更深入地理解面向对象思想,提,提高软件的设计水平和高软件的设计水平和代码质量。代码质量。*1.1.命名空间命名空间 命名空间相当于一个容器,它包含一组定义的类或结构,命名命名空间相当于一个容器,它包含一组定义的类或结构,命名空间也可以嵌套在另一个命名空间中,就像文件目录一样。具有相空间也可以嵌套在另一个命名空间中,就像文件目录一样。具有相同名称的类如果在不同的命名空间中,调用时不会产生混淆。同名称的类如果在不同的命名空间中,调用时

18、不会产生混淆。在在C C# #中中,一般在程序的开头使用关键字,一般在程序的开头使用关键字using using 来引入命名空间,然后就来引入命名空间,然后就可以自由地使用命名空间下的各种类。这些命名空间大多数有一个可以自由地使用命名空间下的各种类。这些命名空间大多数有一个顶级的命名空间顶级的命名空间SystemSystem。 引入命名空间的语句是:引入命名空间的语句是:using using 命名空间命名空间;以下是一个控制台应用程序生成的几个命名空间:以下是一个控制台应用程序生成的几个命名空间:SystemSystem:包含基本类和基类,定义常用的数据类型、数据转换、数包含基本类和基类,定

19、义常用的数据类型、数据转换、数学运算、异常处理等。学运算、异常处理等。System.Collections.GenericSystem.Collections.Generic:包含定义泛型集合的接口和类。:包含定义泛型集合的接口和类。System.LinqSystem.Linq: 提供支持使用语言集成查询提供支持使用语言集成查询 (LINQ) (LINQ) 进行查询的类进行查询的类和接口和接口System.TextSystem.Text:包含包含ASCIIASCII、UnicodeUnicode、UTF-7UTF-7、UTF-8UTF-8字符编码的类和字符编码的类和用于字符处理的类用于字符处理

20、的类*2.2.接接口口 (P(P355355) )接口是一组方法和属性的集合。对于行为跨越不同类的对象,可以使接口是一组方法和属性的集合。对于行为跨越不同类的对象,可以使用接口。就象类是对对象的抽象一样,接口是对行为的抽象。用接口。就象类是对对象的抽象一样,接口是对行为的抽象。(1)声明一个接口)声明一个接口 接口用接口用interface声明,接口名称前要加大写字母声明,接口名称前要加大写字母I,接口中的方法,接口中的方法或属性前面或属性前面不能不能有修饰符,方法有修饰符,方法没有没有方法体。方法体。例:例:叮当猫从肚皮的口袋里变东西、孙悟空可以拔根毫毛变东西有叮当猫从肚皮的口袋里变东西、孙悟空可以拔根毫毛变东西有72变、猪八戒能变、猪八戒能36变,他们都能变东西,但属于不同的类。理论上讲,变,他们都能变东西,但属于不同的类。理论上讲,分别属于猫类、猴类、猪类,都是动物类的子类。若在动物类中定义分别属于猫类、猴类、猪类,都是动物类的子类。若在动物类中定义变东西的方法,则所有的动物都得继承这个能变东西的方法,显然不变东西的方法,则所有的动物都得继承这个能变东西的方法,显然不合理,所以需要定义一个合理,所以需要定义一个“变东西变东西” 的接口的接口IChange:interface Ichange /默认是默认是public的的 strin

温馨提示

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

评论

0/150

提交评论