设计模式简单描述

设计模式简单描述

Administrator 37 2024-08-07

设计模式Design Pattern

设计模式定义

  1. 模式 每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次的重用那些已有的成功的解决方案,无须再重复相同的工作
  2. 设计模式
    1. 设计模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案
    2. 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
    3. 在一定环境下,用固定套路解决问题

面向对象设计原则

背景

1. 如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一
2. 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则

具体设计原则

  1. 4 单一职责原则(Single Responsibility Principle, SRP): 类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个
  2. 5 开闭原则(Open-Closed Principle, OCP): 类的改动是通过增加代码进行的,而不是修改源代码
  3. 5 里氏代换原则(Liskov Substitution Principle, LSP): 任何抽象类(Interface接口)出现的地方都可以用她的实现类进行替换
  4. 5 依赖倒转原则(Dependence Inversion Principle, DIP): 依赖于抽象(接口),不要依赖具体的实现类,针对接口编程
  5. 2 接口隔离原则(Interface Segragation Principle, ISP): 不应该强迫用户的程序依赖他们不需要的接口方法,一个接口应该只提供一种对外功能,不应该把所有的操作都封装到一个接口中去
  6. 4 合成复用原则(Composite Reuse Principle, CRP): 使用继承,会导致父类的任何变换都可能会影响到子类的行为,而使用对象组合,会降低这种依赖关系,对于继承和组合,优先使用组合
  7. 3 迪米特法则(Law of Demeter LOP): 一个对象应当对其他对象尽可能少的了解,从而降低各个对象之间的耦合,提高系统的可维护性。例如在一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现。这样其他模块不需要了解另外一个模块的内部实现细节,这样当一个模块内部的实现发生改变时,不会影响其他模块的使用。(黑盒原理)

设计模式的意义

  1. 为了可重用代码、让代码更容易被他人理解并且保证代码可靠性
  2. 体系化设计思路,提升设计品质

设计模式的种类

  1. 创建型Creational: 如何创建对象
  2. 结构型Structural: 如何实现类或对象的组合
  3. 行为型Behavioral: 类或对象怎样交互、怎样分配职责

具体的模式

创建型模式

  1. 工厂方法模式 5: 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
  2. 抽象工厂模式 5: 提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。
  3. 单例模式 5: 是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
  4. 简单工厂模式 5: 通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
  5. 原型模式 3: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  6. 建造者模式 3: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

结构型模式

  1. 外观模式 5: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
  2. 适配器模式 4: 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  3. 代理模式 4: 为其他对象提供一种代理以控制对这个对象的访问。
  4. 桥接模式 3: 将抽象部分与实际部分分离,使它们都可以独立的变化。
  5. 装饰模式 3: 动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。
  6. 组合模式 2: 将对象组合成树形结构以表示“部分--整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。
  7. 享元模式 1: 以共享的方式高效的支持大量的细粒度的对象。

行为型模式

  1. 观察者模式 5: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  2. 命令模式 4: 将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
  3. 策略模式 4: 准备一组算法,并将每一个算法封装起来,使得它们可以互换。
  4. 模板方法模式 3: 得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  5. 职责链模式 2: 在该模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
  6. 中介者模式 2: 定义一个中介对象来封装系列对象之间的交互。终结者使各个对象不需要显示的相互调用,从而使其耦合性松散,而且可以独立的改变他们之间的交互。
  7. 备忘录模式 2: 是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  8. 状态模式 2: 对象的行为,依赖于它所处的状态。
  9. 访问者模式 2: 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  10. 解释器模式 1: 如何为简单的语言定义一个语法,如何在该语言中表示一个句子,以及如何解释这些句子。
  11. 迭代器模式 1: 提供了一种方法顺序来访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。