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

下载本文档

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

文档简介

Design Patterns,设计模式概述,引言,欢迎进入模式世界!,设计模式的诞生与发展,模式的诞生与定义 模式(Pattern)起源于建筑业而非软件业 模式之父美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士 A Pattern Language: Towns, Buildings, Construction253个建筑和城市规划模式 模式 Context(模式可适用的前提条件) Theme或Problem(在特定条件下要解决的目标问题) Solution(对目标问题求解过程中各种物理关系的记述),设计模式的诞生与发展,Christopher Alexander,设计模式的诞生与发展,模式的诞生与定义 Alexander给出了关于模式的经典定义: 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,人们可以无数次地重用那些已有的解决方案,无须再重复相同的工作,设计模式的诞生与发展,软件模式概述 20世纪80年代末,软件工程界开始关注Christopher Alexander等在这一住宅、公共建筑与城市规划领域的重大突破 “四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”于1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟,设计模式的诞生与发展,Gang of Four (GoF),设计模式的诞生与发展,Erich Gamma,苏黎世大学计算机科学博士,是Eclipse、 JUnit 等项目的负责人,John Vlissides,斯坦福大学计算机科学博士,原IBM研究员,于2005年11月24日因脑瘤去世,享年44岁,Ralph Johnson,墨尔本大学计算机科学博士,原IBM 研究员,现供职于波士顿顾问集团,Richard Helm,康奈尔大学计算机科学博士,伊利诺伊大学教授,Gang of Four,设计模式的诞生与发展,软件模式概述 软件模式:在一定条件下的软件开发问题及其解法 问题描述 前提条件(环境或约束条件) 解法 效果,设计模式的诞生与发展,软件模式概述,设计模式的诞生与发展,设计模式的发展 从1995年至今,设计模式在软件开发中得以广泛应用,在Sun的Java SE/Java EE平台和Microsoft的.NET平台设计中应用了大量的设计模式 轻量级框架:Struts、Spring、Hibernate、JUnit、NHibernate、NUnit 语言:C+、Java、C#、Objective-C、 VB.net、Smalltalk、PHP、 Delphi、JavaScript、Ruby 得到越来越多的企业和高校的关注与重视 越来越多的书籍和网站,设计模式的定义与分类,设计模式的定义 设计模式(Design Pattern) 一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结 是一种用于对软件系统中不断重现的设计问题的解决方案进行文档化的技术 是一种共享专家设计经验的技术 目的:为了可重用代码、让代码更容易被他人理解、提高代码可靠性,设计模式的定义与分类,设计模式的定义,设计模式的定义与分类,设计模式的分类 根据目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类: 创建型模式主要用于创建对象 结构型模式主要用于处理类或对象的组合 行为型模式主要用于描述类或对象如何交互和怎样分配职责,GoF设计模式简介,设计模式的优点,融合了众多专家的经验,并以一种标准的形式供广大开发人员所用 提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂 让人们可以更加简单方便地复用成功的设计和体系结构 使得设计方案更加灵活,且易于修改 将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本 有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量,单例模式 工厂模式 代理模式 命令模式 策略模式,单例模式概述,Windows任务管理器,在正常情况下只能打开唯一一个任务管理器!,单例模式概述,如何保证一个类只有一个实例并且这个实例易于被访问? (1) 全局变量:可以确保对象随时都可以被访问,但不能防止创建多个对象 (2) 让类自身负责创建和保存它的唯一实例,并保证不能创建其他实例,它还提供一个访问该实例的方法,单例模式,单例模式概述,单例模式的定义,Only one!,单例模式概述,单例模式的定义 要点: 某个类只能有一个实例 必须自行创建这个实例 必须自行向整个系统提供这个实例,单例模式的结构与实现,单例模式的结构,单例模式的结构与实现,单例模式的结构 单例模式只包含一个单例角色: Singleton(单例),单例模式的结构与实现,单例模式的实现 私有构造函数 静态私有成员变量(自身类型) 静态公有的工厂方法,简单工厂模式概述,简单工厂模式示意图,客户端,工厂,产品,参数,简单工厂模式概述,简单工厂模式基本实现流程 具体产品类:将需要创建的各种不同产品对象的相关代码封装到具体产品类中 抽象产品类:将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中 工厂类:提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方法,该方法可以根据所传入参数的不同创建不同的具体产品对象 客户端:只需调用工厂类的工厂方法并传入相应的参数即可得到一个产品对象,简单工厂模式概述,简单工厂模式的定义,简单工厂模式概述,简单工厂模式的定义 在简单工厂模式中用于创建实例的方法通常是静态(static)方法,因此又被称为静态工厂方法(Static Factory Method)模式 要点:如果需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无须知道其创建细节,简单工厂模式的结构与实现,简单工厂模式的结构,简单工厂模式的结构与实现,简单工厂模式的结构 简单工厂模式包含以下3个角色: Factory(工厂角色) Product(抽象产品角色) ConcreteProduct(具体产品角色),简单工厂模式的结构与实现,简单工厂模式的实现 典型的抽象产品类代码:,简单工厂模式的结构与实现,简单工厂模式的实现 典型的具体产品类代码:,简单工厂模式的结构与实现,简单工厂模式的实现 典型的工厂类代码:,简单工厂模式的结构与实现,简单工厂模式的实现 典型的客户端代码:,工厂方法模式概述,使用简单工厂模式设计的按钮工厂,工厂方法模式概述,使用工厂方法模式改进后的按钮工厂,工厂方法模式概述,分析 工厂方法模式: 不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成 如果出现新的按钮类型,只需要为这种新类型的按钮定义一个具体的工厂类就可以创建该新按钮的实例,开闭原则,工厂方法模式概述,工厂方法模式的定义,工厂方法模式的结构与实现,工厂方法模式的结构,工厂方法模式的结构与实现,工厂方法模式的结构 工厂方法模式包含以下4个角色: Product(抽象产品) ConcreteProduct(具体产品) Factory(抽象工厂) ConcreteFactory(具体工厂),工厂方法模式的结构与实现,工厂方法模式的实现 典型的抽象工厂类代码:,工厂方法模式的结构与实现,工厂方法模式的实现 典型的具体工厂类代码:,工厂方法模式的结构与实现,工厂方法模式的实现 典型的客户端代码片段:,抽象工厂,工厂方法模式 每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销 抽象工厂模式 一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量,产品等级结构与产品族,概念 产品等级结构:产品等级结构即产品的继承结构 产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,五个产品族,分属于三个不同的产品等级结构,抽象工厂模式概述,抽象工厂模式的定义,抽象工厂模式的结构与实现,抽象工厂模式的结构,抽象工厂模式的结构与实现,抽象工厂模式的结构 抽象工厂模式包含以下4个角色: AbstractFactory(抽象工厂) ConcreteFactory(具体工厂) AbstractProduct(抽象产品) ConcreteProduct(具体产品),抽象工厂模式的结构与实现,抽象工厂模式的实现 典型的抽象工厂类代码:,抽象工厂模式的结构与实现,抽象工厂模式的实现 典型的具体工厂类代码:,代理模式概述,商品代购示意图,代理模式概述,分析 代购商品:顾客 代购网站 商品 软件开发:客户端 代理对象 真实对象,客户端,代理对象,真实对象,代理模式概述,类型,远程代理,保护代理,虚拟代理,缓冲代理,智能引用代理,代理模式,代理模式概述,代理模式的定义,代理模式概述,代理模式的定义 引入一个新的代理对象 代理对象在客户端对象和目标对象之间起到中介的作用 去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务,代理模式的结构与实现,代理模式的结构,代理模式的结构与实现,代理模式的结构 代理模式包含以下3个角色: Subject(抽象主题角色) Proxy(代理主题角色) RealSubject(真实主题角色),代理模式的结构与实现,代理模式的实现 抽象主题类典型代码:,代理模式的结构与实现,代理模式的实现 真实主题类典型代码:,代理模式的结构与实现,代理模式的实现 代理类典型代码:,命令模式概述,开关与电灯、排气扇示意图,命令模式概述,分析 现实生活 相同的开关可以通过不同的电线来控制不同的电器 开关 请求发送者 电灯 请求的最终接收者和处理者 开关和电灯之间并不存在直接耦合关系,它们通过电线连接在一起,使用不同的电线可以连接不同的请求接收者,命令模式概述,分析 软件开发 按钮 请求发送者 事件处理类 请求的最终接收者和处理者 发送者与接收者之间引入了新的命令对象(类似电线),将发送者的请求封装在命令对象中,再通过命令对象来调用接收者的方法 相同的按钮可以对应不同的事件处理类,命令模式概述,动机 将请求发送者和接收者完全解耦 发送者与接收者之间没有直接引用关系 发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求,命令模式,命令模式概述,命令模式的定义,命令模式的结构与实现,命令模式的结构,命令模式的结构与实现,命令模式的结构 命令模式包含以下4个角色: Command(抽象命令类) ConcreteCommand(具体命令类) Invoker(调用者) Receiver(接收者),命令模式的结构与实现,命令模式的实现 命令模式的本质是对请求进行封装 一个请求对应于一个命令,将发出命令的责任和执行命令的责任分开 命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收、操作是否被执行、何时被执行,以及是怎么被执行的,命令模式的结构与实现,命令模式的实现 典型的抽象命令类代码:,命令模式的结构与实现,命令模式的实现 典型的调用者(请求发送者)类代码:,命令模式的结构与实现,命令模式的实现 典型的具体命令类代码:,命令模式的结构与实现,命令模式的实现 典型的请求接收者类代码:,策略模式概述,旅游出行方式示意图,策略模式概述,分析 实现某个目标的途径不止一条,可根据实际情况选择一条合适的途径 软件开发: 多种算法,例如排序、查找、打折等 使用硬编码(Hard Coding)实现将导致系统违背开闭原则,扩展性差,且维护困难 可以定义一些独立的类来封装不同的算法,每一个

温馨提示

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

评论

0/150

提交评论