一丶设计模式的诞生与发展

1:设计模式的诞生

模式(Pattern)本诞生于建筑业,美国加利福尼亚大学环境结构中心研究所长Christophere Alexander用了20年的事件,对舒适住宅和周边环境进行大量的调查和收集工作,在他的著作《建筑模式语言:城镇·建筑·构造》中把人们对舒适住宅和环境的认同规律归纳为253个模式,对每一个模式都从Context(前提条件),Theam(目标问题),Solution(解决方法)三个方面进行描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。

Alexander说,每一个模式就是一个规则,它描述了它所限定的整体和你必须要做的事情,并且给出了模式的经典定义:“每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,人们可以无数次重用那些已有的解决方案,无需再重复相同的工作。”

20世纪80年代末,软件工程界开始关注这一建筑模式的概念,GoF(四位著名软件工程学者,简称为GoF)并在94年归纳了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析,设计和实现间的鸿沟。

2:设计模式的发展

在软件模式的领域,目前研究最深入的是设计模式

87年,Ken Beck和Wark Cunningham在OOPSLA大会上发表了他们的成果,但并没有太大反响

90年,OOPSLA和ECOOP在渥太华联合举办,:四人组(GoF,Erich Gamma ,Richard Helm,Ralph Johnson和Hohn Vlissides)正式成立“,并开始整理设计模式

91-94年,OOPSLA和PLo'94(面向对象模式)会议继续进行,设计模式逐渐完善

95年,四人组出版了《设计模式:可复用面向对象软件的基础》一书,该书成为了95年最抢手的面向对象书籍,也成为设计模式的经典书籍,该书的出版意味着设计模式正式成为软件工程领域一个重要的研究分支

狭义的设计模式指的就是GoF一书中包含的23种经典的设计模式,实际上设计模式不仅仅是这23种,现在有越来越多的设计模式不断诞生并得以广泛应用

设计模式的出现可以让开发人员站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的设计和开发,以便开发出具有更好的灵活性和拓展性,也更易于复用的软件系统

二丶设计模式的定义与分类

1:设计模式的定义

GoF定义:设计模式实在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用

2:设计模式的基本要素

模式名称(Pattern Name):在已有的类库种,很多使用了设计模式的类名通常包含了所使用的设计模式的模式名称,比如,如果一个类名称为XXXAdapeter,则该类是适配器类,在设计时使用了适配器模式,如果一个类名称为XXXFactory,则该类是一个工厂类,一定包含了一个工厂方法用于返回一个类的实例对象。

问题:问题描述了应该在何时使用模式,包含了原始设计中存在的问题和问题存在的原因,这些问题有些是特定的设计问题,如怎么使用对象封装状态或使用对象表示算法等,也可能是系统中存在不灵活的类或对象结构导致系统的可维护性较差等。

解决方案:解决方案描述了设计模式的组成部分,以及这些组成成分之间的相互关系,各自的职责和协作方式。模式是一个通用的模板,它们可以应用于各种不同的场合,解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。

效果(Consequences):效果描述了模式的应用情况以及在使用模式时应该权衡的问题

除了上面四个基本要素外,完整的设计模式还包含:模式的别名,模式的分类,模式的适用性(什么情况下才能使用该设计模式),模式角色(模式的参与者,模式中的类和对象,以及他们的职责),模式实例,模式应用,模式拓展。

3:设计模式的分类

根据目的分类:

创建型模式:此类模式主要用于创建对象,GoF提供了5种创建型模式,工厂方法模式(Factory Method Pattern),抽象工厂模式(Abstract Factory Pattern),建造者模式(Bulider Pattern),原型模式(Prototype Pattern),单例模式(Single Pattern)

结构型模式:此类模式主要用于处理类和对象的组合,GoF提供了7种结构性模式,适配器模式(Adapter Pattern),桥接模式(Bridge Pattern),组合模式(Composite Pattern),装饰模式(Decorator Pattern),外观模式(Facade Pattern),享元模式(Flyweight Pattern),代理模式(Proxy Pattern)

行为型模式:此类模式主要用于描述类和对象如何交互和分配职责,有11种行为型模式,职责链模式(Chain of Responsibility Pattern),命令模式(Command Pattern),解释器模式(Interpreter Pattern),迭代器模式(Iterator Pattern),中介者模式(Mediator Pattern),备忘录模式(Memento Pattern),观察者模式(Observer Pattern),状态模式(State Pattern),策略模式(Strategy Pattern),模板方法模式(Method Pattern),访问者模式(Visitor Pattern)

根据据范围分类:

类模式(处理类之间的关系):这些关系通过继承建立,是一种静态关系,包括工厂方法模式,适配器模式,解释器模式,模板方法模式

对象模式(处理对象之间的关系):这些关系在运行时变化,更具动态性,为剩下的20种模式

三丶GoF设计模式

设计模式的简要说明
创建型模式 模式名称 模式说明
抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
建造者模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
工厂方法模式 定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化,工厂方法模式让一个类的实例化延伸到其子类
原型模式 使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象
单例模式 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例
结构型模式 适配器模式 将一个类的接口转换成客户希望的另一个接口,适配器模式让那些接口不兼容的类可以一起工作
桥接模式 将抽象部分与它的实现部分解耦,使得两者都能独立变化
组合模式 组合多个对象形成树形结构以表示具有部分——整体关系的层次结构,组合模式让客户端可以统一对待单个对象和组合对象
装饰模式 动态地给一个对象增加一些额外的职责,就扩展功能而言,装饰模式提供一个比使用子类更加灵活的替代方案
外观模式 为子系统种的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这个子系统更加容易使用
享元模式 运用共享技术能有效支持大量细粒度对象的复用
代理模式 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问
行为型模式 职责链模式 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求;将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止
命令模式 将一个请求封装成一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作
解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
迭代器模式 提供一种方法顺序访问一个聚合对象种的各个元素,而不用暴漏该对象的内部表示
中介者模式 定义一个对象来封装一系列对象的交互,中介者模式使各对象之间不需要显式得相互引用,从而使其耦合松散,而且让你可以独立地改变他们之间得交互
备忘录模式 在不破坏封装得前提下,捕获一个对象得内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原来得状态
观察者模式 定义对象之间得一种一对多得依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新
状态模式 允许一个对象在其内部状态改变时改变它得行为,对象看起来似乎修改了它的类
策略模式 定义一系列算法,将每个算法封装起来,并让它们可以相互替换,策略模式让算法可以独立于使用它的客户变化
模板方法模式 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即重新定义该算法的某些特定步骤
访问者模式 表示一个作用于某对象结构种的各个元素的操作,访问者模式可以让你在不改变个元素的类的前提下定义作用于这些元素的新操作

设计模式Part1——设计模式概述相关推荐

  1. 23种设计模式——软件设计模式概述

    文章目录 23种设计模式--软件设计模式概述 1.软件设计模式的产生背景 2.软件设计模式的概念与意义 2.1. 软件设计模式的概念 2.2. 学习设计模式的意义 3.软件设计模式的基本要素 4.23 ...

  2. 细谈八种架构设计模式及其优缺点概述

    作者:风平浪静如马 一.什么是架构 我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果.哈哈,我理解,架构就是骨架,如下图所示: 人类的身体的支撑是主要由骨架来承担的,然后是其上 ...

  3. 设计模式私家笔记——概述:设计模式是银弹吗?

    什么是设计模式? 设计模式OOP(面向对象编程)语言的一些最佳编程实践.这些从大量和长期的软件开发实践和试错中积累出来的通用解决方案(设计模式),往往能够解决软件开发面临的一些通用问题. 设计模式从何 ...

  4. 【设计模式】设计模式

    概述 设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通 用解决方案,设计模式(Design pattern)代表了最佳的实践.这些解决方案 ...

  5. 设计模式(35)-----设计模式阶段性总结(一句话概括一个模式)

    假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个魔咒,假如你想体验BAT的工作环境,那么现在请我们一起开启提升技术之旅吧,详情 ...

  6. 深入浅出设计模式之设计模式简介

    一.什么是设计模式(详见设计模式概念和七大原则) 在GoF(Gang of Four)的书籍<Design Patterns - Elements of Reusable Object-Orie ...

  7. 设计模式---适配器设计模式

    设计模式---适配器设计模式 什么事适配器: 1. 在使用监听的时候,需要定义一个类事件监听器接口 2. 通常接口中有多个方法,而程序中不一定所有的方法都用到,但又必须重写,很繁琐 3. 适配器简化了 ...

  8. 设计模式一の设计模式详解

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

  9. 结构设计模式 - 适配器设计模式

    结构设计模式 - 适配器设计模式 PANKAJ  17评论 适配器设计模式是结构设计模式之一,其使用使得两个不相关的接口可以一起工作.连接这些不相关接口的对象称为适配器. 目录[ 隐藏 ] 1适配器设 ...

最新文章

  1. 2021年人工神经网络第一次作业:参考答案-1
  2. python采用函数式编程模式吗_Python函数与函数式编程
  3. 现代密码学5.4--对哈希函数的攻击
  4. 计算机网络访问控制列表,南昌大学计算机网络实验-访问控制列表ACL
  5. spring 面向接口编程_Spring面向方面的编程
  6. Algorithm(1) - Karatsuba multiplication
  7. 2017.5.11 道路修建 思考记录
  8. Unity Shader: Shader粒子广告牌
  9. 小米金融:与涉案的“山东小米金融服务外包有限公司”无关系
  10. 基于JAVA+SSH+MYSQL的鲜花订购系统
  11. 大数据平台系统该如何选择
  12. 树莓派 | 摄像头模块的使用方法
  13. 前端安全——XSS攻击与防御原理详解
  14. connect() to unix:/home/tmp/myproject.sock failed (2: No such file or directory)
  15. 安卓sqlite的使用
  16. python实现图像像素修改脚本
  17. HTML中nbsp 和空格的区别?
  18. 里氏代换原则——及之我见
  19. 漫画丨CTO不得不面对的9大困境
  20. php如何每三位逗号分开,PHP 数字格式化,数字每三位加逗号的简单示例

热门文章

  1. linux 内存与磁盘管理
  2. 力扣765----情侣牵手(C++异或解法)
  3. linux如何查看wifi信号强弱
  4. UNIX设计哲学概要
  5. 7-3 出租车计价 (15分)
  6. 制作 Linux mint 20.2 随身系统
  7. centos7/redhat7离线安装postgresql+postgis并配置主从并做故障切换演练(9.6、11.6、13和14版本)
  8. edge如何玩4399小游戏
  9. FluentValidation验证教程
  10. java基于springboot社区共享食堂订餐信息系统maven