设计模式(Design Patterns)的简单讲解

  • 模式的诞生与定义


  1. 模式(Pattern)起源于建筑业而非软件业(小本本记下来~~)
  2. 模式之父--美国加利佛尼亚大学环境结构中心研究所所长Christopher Alexander博士;
  3. 模式 :

    -Context(模式可适用的前提条件)
    -Theme或Problem(在特定条件下要解决的目标问题)
    -Solution(对目标问题求解过程中各种物理关系的记述)

  4. 模式是在特定环境下人们解决某类重复出现问题的一套成功有效的解决方案(简单来说就是为了减少工作量)。
  5. 程序设计的最大的特点:  变化   因为环境、设备、用户的需求等原因,  导致程序经常发生变化
  6. 基本结构
  7. 设计模式的定义:一套被反复使用的,多数人知晓的,经过分类遍目的、代码设计经验的总结,使用设计模式是为了可重复使用代码,让代码更容易被他人理解并且提高代码的可靠性(目的)。设计模式是一种对软件系统中不断重复出现的设计问题的解决方案进行文档化的技术,也是一种共享专家设计经验的技术。
  8. 基本要素 :模式名称(Pattern Name)、问题(Problem) 、解决方案(Solution)、效果(Consequences)
  • 设计模式的分类


  1. 根据目的(模式是用来做什么的):可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三类
  2. 根据范围,即模式主要是处理类之间的关系还是处理对象之间的关系,可分为类模式和对象模式两种:
    1. 类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是一种静态关系
    2. 对象模式处理对象间的关系,这些关系在运行时变化,更具动态性
  • GoF设计模式


  1. 四人组(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”于1994年归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
  2. 创建型模式(关注对象的创建过程,对类的实例化过程进行抽象,描述如何将对象的创建和使用分离)
    抽象工厂模式(Abstract Factory) ★★★★★
    建造者模式(Builder) ★★☆☆☆
    工厂方法模式(Factory Method) ★★★★★(GoF 之外:简单工厂模式)
    原型模式(Prototype) ★★★☆☆
    单例模式(Singleton) ★★★★☆

  3. 结构型模式(关注如何将现有类或对象组织在一起形成更加强大的结构)
    适配器模式(Adapter) ★★★★☆
    桥接模式(Bridge) ★★★☆☆
    组合模式(Composite) ★★★★☆
    装饰模式(Decorator) ★★★☆☆
    外观模式(Facade) ★★★★★
    享元模式(Flyweight) ★☆☆☆☆
    代理模式(Proxy) ★★★★☆

  4. 行为型模式(关注系统中对象间的交互,研究系统在运行时对象之间的相互通信与协作进一步明确对象的职责)
    职责链模式(Chain of Responsibility) ★★☆☆☆
    命令模式(Command) ★★★★☆
    解释器模式(Interpreter) ★☆☆☆☆
    迭代器模式(Iterator) ★★★★★
    中介者模式(Mediator) ★★☆☆☆
    备忘录模式(Memento) ★★☆☆☆
    观察者模式(Observer) ★★★★★
    状态模式(State) ★★★☆☆
    策略模式(Strategy) ★★★★☆
    模板方法模式(Template Method) ★★★☆☆
    访问者模式(Visitor) ★☆☆☆☆

  • 常用面向对象设计的原则


  1. 单一职责原则(Single Responsibility Principle, SRP)| ★★★★☆ : 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 

    1. 另一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。简单而言,就是一个类如果职责越多,那么它被复用的可能性就越低。即这个类中一个职责变化,可能会影响到其他的职责的运作。因此,单一职责原则就是实现高内聚,低耦合,将一个类的职责降低到最小,即类的数目很多,类中职责很少,因而类被复用的可能性被提高。
  2. 开闭原则(Open-Closed Principle,OCP) | ★★★★★ : 软件实体应当对扩展开放,对修改关闭
    1. 开闭原则是复用设计的第一块基石。在软件实体中应在尽量不修改原有代码的情况下进行扩展
  3. 里氏代换原则(Liskov Substitution Principle,LSP)| ★★★★★ : 所有引用基类的地方必须能透明地使用其子类的对象 
    1. 在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何的错误和异常,反之不成立。例如:我喜欢动物,那么我一定喜欢狗,因为狗是动物的子类,反之不成立
  4. 依赖倒转原则(Dependence Inversion Principle,DIP) |  ★★★★★ : 高层模块不应该依赖低层模块,它们应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象
    1. 要针对接口编程,不针对实现编程。一个具体类应当只实现接口或抽象类中声明过的方法,而不给出多余的方法,否在无调用到在子类中增加的新方法
  5. 接口隔离原则(Interface Segregation Principle,ISP)| ★★☆☆☆ : 客户端不应该依赖那些它不需要的接口 
    1. 当一个接口太大时,将它分割成一些更细小的接口,使用该接口的客户端只要知道与之相关的方法即可
  6. 合成复用原则(Composite Reuse Principle,CRP)| ★★★☆☆:优先使用对象组合,而不是继承来达到复用的目的
    1. 在一个新的对象里通过关联关系(包括组合和聚合关系)来使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用功能的目的
  7. 迪米特法则(Law of Demeter,LoD)| ★★★☆☆ : 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位 
    1. 又称最少知识原则,一个软件实体应尽可能少地与其他类发生相互作用
  • 设计模式的优点


  1.   融合了众多专家的经验,并以一种标准的形式供广大开发人员所用
  2.   提供了一套通用的设计词汇和一种通用的语言,以方便开发人员之间进行沟通和交流,使得设计方案更加通俗易懂
  3.   让人们可以更加简单方便地复用成功的设计和体系结构
  4.   使得设计方案更加灵活,且易于修改
  5.   将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本
  6.   有助于初学者更深入地理解面向对象思想,方便阅读和学习现有类库与其他系统中的源代码,还可以提高软件的设计水平和代码质量
  • 设计模式的缺点


  1.   要说缺点的话,每一种都有它适用的地方和不适用之处,若使用不当,缺点往往会暴露的很明显。因此,学习到位,理解透彻,运用的多了,自然懂得如何扬长避短了,因而模式的缺点就尽可能的最小化了
(0)

相关推荐

  • 关于“架构”与“框架”、“模式”与“模型”的思考

    目录 概念 架构 模型 框架 设计模式 正文 回到顶部 概念 架构 软件结构上具体的表现形式,其抽象的对应概念是--模型! 所以你听说过各个公司的组织架构,但其架构不可能都相同. 我们常常听说&quo ...

  • 【工程基础】校招研发工程师笔试题

    【工程基础】校招研发工程师笔试题

  • 设计模式之欢迎来到设计模式世界(二)

    第一节的内容,不知道大家看的如何.小编在博客园的评论里,找到了第一篇的一个缺点,没有把动态改变行为的Duck子类列出来,导致有小伙伴有疑问.在这里说声抱歉,是我疏忽了,好在有GitHub,让大家可以进 ...

  • 经典永不过时!重温设计模式

    来自公众号:极客重生 | 导语 在软工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案.这个术语是由埃里希·伽玛(Erich Gamma)等 ...

  • "设计模式我学过呀,就是没用过"

    回复"000"获取大量电子书 写在前面 在开发中,不使用设计模式也不是不可以,但是用好设计模式能帮忙我们更好的去解决实际问题. 其实,我们天天都在和设计模式打交道,很多人却完全不知 ...

  • 二十三种设计模式修炼手册

    不知不觉,在开发这条道路上摸爬打滚也有些年头了,偶尔回头看看以前写的代码,真可谓粗糙至极.当然了,那时候还是小白,代码写得难看些情有可原,不过现在可不能再用以前的标准去衡量自己了,因此掌握一些高级架构 ...

  • 业余电工简单讲解水管焊接验收小知识

    水走顶容易被装修业主接受,重要一点是说容易看到漏水点,容易维修.但懂行的都知道,PPR水管属于暗装水管,明装会缩短使用年限 水走顶最大说题是漏水点好找,好象PPR管很容易漏水一样.个人认为合格的PPR ...

  • 二乔牡丹画法简单讲解,太实用了!

    引导语--牡丹,花之富贵者也,可爱者甚番!爱牡丹的人很多,能把牡丹画好的人却寥寥无几,这篇文章将告诉你牡丹的基本画法,对于学习牡丹的书画爱好者具有很大的借鉴意义! 牡丹画法 深红牡丹画法: 笔肚蘸较稀 ...

  • 【狂人小帮手攻略】现版本最新魔窟17上19简单讲解

    魔窟17上19 详情 现在的魔窟如果你拥有了,伊丽莎白.帕米拉.巴鲁贝尔.科迈罗的情况,正常情况下需要分期付款才能到19-30啦,为什么这么说呢?先看下面视频 简单讲解 为什么说要分期才能到19-30 ...

  • 【船舶知识】节流阀和调速阀的区别(简单讲解)

    ◎荐读丨智能化部  转自丨爱液压 节流阀和调速阀 Restrictor valve and Flow regulator 节流阀是流量控制阀中的一种最基本的阀种,其他的流量阀均包含有节流阀的部分.节流 ...

  • 水电工简单讲解水管焊接验收小知识

    PPR管发生漏水情况绝大多数应该是焊接出现问题,今天就来简单说一下PPR水管在焊接中的一点小知识.欢迎专业人士指出不足 PPR水管的接口采用热熔焊接技术,管子和配件之间完全融合在一起,看下图热熔成一个 ...

  • ABAP Objects Design Patterns – Model View Controller (MVC) Part 2

    转载自 By Naimesh Patel In this post, we will see how we can implement the MVC (Model-View-Controller) ...

  • 简单讲解几张初学国画山水者的作品,这些错误你犯过吗?

    简单讲解几张初学国画山水者的作品,这些错误你犯过吗?

  • 索坦价格:索坦多少钱一盒以及通常服用剂量简单讲解

    索坦价格:索坦多少钱一盒?以及索坦通常服用剂量简单讲解.据悉,肾癌占成人恶性肿瘤的2%-3%,所有泌尿器官肿瘤中,肾癌是泌尿系统第二常见的恶性肿瘤,无症状比例逐年增加,并且肾癌的死亡率位居榜首.有近乎 ...

  • 【C++设计模式一】C++简单工厂模式

    (1)定义 定义一个简单工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类. (2)结构 简单工厂模式有以下的结构: 工厂(Factory):根据客户提供的具体产品类的参数 ...