【OOAD】设计模式概述

  • 模式的诞生与定义

模式起源于建筑业而非软件业
模式(Pattern)之父——美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士
《A Pattern Language: Towns, Buildings, Construction》——253个建筑和城市规划模式
模式
Context(模式可适用的前提条件)
Theme或Problem(在特定条件下要解决的目标问题)
Solution(对目标问题求解过程中各种物理关系的记述)

Alexander给出了关于模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。
A pattern is a solution to a problem in a context
模式是在特定环境中解决问题的一种方案

  • 软件模式


Gang of Four
1990年,软件工程界开始关注Christopher Alexander等在这一住宅、公共建筑与城市规划领域的重大突破,最早将该模式的思想引入软件工程方法学的是1991-1992年以“四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自称的四位著名软件工程学者,他们在1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。

软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件生存期的每一个阶段都存在着一些被认同的模式。
软件模式可以认为是对软件开发这一特定“问题”的“解法”的某种统一表示,它和Alexander所描述的模式定义完全相同,即软件模式等于一定条件下的出现的问题以及解法。软件模式的基础结构由4个部分构成:问题描述、前提条件(环境或约束条件)、解法和效果。

软件模式与具体的应用领域无关,在模式发现过程中需要遵循大三律(Rule of Three),即只有经过三个以上不同类型(或不同领域)的系统的校验,一个解决方案才能从候选模式升格为模式。

  • 设计模式的发展


  • 设计模式的定义与分类

设计模式的定义
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

设计模式的基本要素

设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面:
模式名称 (Pattern name)
问题 (Problem)
解决方案 (Solution)
效果 (Consequences)

设计模式学习步骤
模式动机与定义
模式结构与分析
模式实例与解析
模式效果与应用
模式扩展

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

  • GoF设计模式简介

范围\目的


创建型模式


结构型模式


行为型模式


类模式


工厂方法模式


(类)适配器模式


解释器模式

模板方法模式


对象模式


抽象工厂模式

建造者模式

原型模式

单例模式


(对象)适配器模式

桥接模式

组合模式

装饰模式

外观模式

享元模式

代理模式


职责链模式

命令模式

迭代器模式

中介者模式

备忘录模式

观察者模式

状态模式

策略模式

访问者模式

  • 设计模式的优点

设计模式是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案将避免我们做一些重复性的工作,而且可以设计出高质量的软件系统。
设计模式的主要优点如下:
? 设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。对于使用不同编程语言的开发和设计人员可以通过设计模式来交流系统设计方案,每一个模式都对应一个标准的解决方案,设计模式可以降低开发人员理解系统的复杂度。
? 设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。
? 设计模式使得设计方案更加灵活,且易于修改。
? 设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。
? 设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。

  • 创建型模式概述

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。

创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

创建型模式简介
简单工厂模式(Simple Factory)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
单例模式(Singleton )

  • 结构型模式概述

结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。

结构型模式可以分为类结构型模式和对象结构型模式:
? 类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。
? 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。

结构型模式简介
? 适配器模式(Adapter)
? 桥接模式(Bridge)
? 组合模式(Composite)
? 装饰模式(Decorator)
? 外观模式(Facade)
? 享元模式(Flyweight)
? 代理模式(Proxy)

  • 行为型模式概述

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。

行为型模式分为类行为型模式和对象行为型模式两种:
? 类行为型模式:类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
? 对象行为型模式:对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。

行为型模式简介
? 职责链模式(Chain of Responsibility)
? 命令模式(Command)
? 解释器模式(Interpreter)
? 迭代器模式(Iterator)
? 中介者模式(Mediator)
? 备忘录模式(Memento)
? 观察者模式(Observer)
? 状态模式(State)
? 策略模式(Strategy)
? 模板方法模式(Template Method)
? 访问者模式(Visitor)

时间: 2024-12-07 23:02:29

【OOAD】设计模式概述的相关文章

设计模式-概述

设计模式概述 设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案. 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性. 面向对象设计模式 面向对象设计模式描述了类与相互通信的对象之间的组织关系.目的是应对变化.提高复用.减少改变. 对象 1.从概念层面讲,对象是某种拥有职责的抽象: 2.从规格层面讲,对象是一系列可以被其他对象使用的公共接口: 3.从语言实现层面来看,对象封装了代码和数据(也

设计模式概述【整理】

设计模式不是很快的提高你的编码能力,设计模式的学习,旨在避免重复编码,减少劳动量.学习设计模式,对提高编写高效代码,大有裨益.学习设计模式,首先引入设计原则. 设计原则 设计模式的核心原则是:"开-闭"原则(  Open - Closed Principle 缩写:OCP  ),一切的一切都是围绕着"开-闭"原则展开的.. 意思是,在一个系统中,对于扩展是开放的,对于修改是关闭的,一个好的系统是在不修改源代码的情况下,可以扩展你的功能..而实现开闭原则的关键就是抽象

设计模式概述 + 分类

A:设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.        使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性以及代码的结构更加清晰.        B:设计模式分类        创建型模式(创建对象的):    单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.        行为型模式(对象的功能):    适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.  

设计模式概述与原则

一 . 设计模式概述 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型 模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式. 组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任 链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 具体如下: 其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问

java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单一职责原则 其实就是开发人员经常说的"高内聚,低耦合" 也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 开闭原则 核

iOS设计模式 - 概述

最近可自由安排的时间比较多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 因为我自己是搞iOS的, 所以之后设计代码部分, 将尽量与objective-c相结合. iOS设计模式 - 概述           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40372113 一.定义 设计模式(Des

PHP设计模式概述

PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 为什么要提倡设计模式 (Design Pattern)呢? 根本原因是为了代码复用,增加可维护性. 那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open Cl

设计模式@第4章:设计模式概述

第4章:设计模式概述 (一)掌握设计模式的层次 1) 第 1 层:刚开始学编程不久,听说过什么是设计模式 2) 第 2 层:有很长时间的编程经验,自己写了很多代码,其中用到了设计模式,但是自己却不知道 3) 第 3 层:学习过了设计模式,发现自己已经在使用了,并且发现了一些新的模式挺好用的 4) 第 4 层:阅读了很多别人写的源码和框架,在其中看到别人设计模式,并且能够领会设计模式的精妙和带来的好处. 5) 第 5 层:代码写着写着,自己都没有意识到使用了设计模式,并且熟练的写了出来. (二)设

PHP设计模式——概述

声明:本系列博客参考资料<大话设计模式>,作者程杰. 常见的面向对象设计模式大约有23种,但是自从接触PHP后,渐渐发现常见的设计模式好像少了很多,网络上的资料也比较少,身边的PHP同事们有的甚至没有听说过设计模式,这也有可能是PHP的发展所带来的,因为PHP对面向对象支持的比较晚,好多PHP程序员还按照面向过程的思想写代码.于是,我决定把原来用C#写的面向对象设计模式用PHP改写. 什么是设计模式? 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码