设计模式概述

概述

一、设计原则
1、依赖倒置原则(DIP)
  • 高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。
  • 抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。
2、开放封闭原则(OCP)
  • 对扩展开放,对更改封闭。
  • 类模块应该是可扩展的,但是不可修改。
3、单一职责原则(SRP)
  • 一个类应该仅有一个引起它变化的原因。
  • 变化的方向隐含着类的责任。
4、里氏替换原则(LSP)
  • 子类必须能够替换它们的基类(is-a)。
  • 继承表达类型抽象。
5、接口隔离原则(ISP)
  • 不应该强迫客户程序依赖它们不用的方法。
  • 接口应该小而完备。
6、优先使用对象组合,而不是类继承
  • 类继承通常为“白箱复用”,对象组合通常为“黑箱服用”。
  • 继承在某种程度上破坏了封装性,子类父类耦合度较高。
  • 而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。
7、封装变化点
  • 使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。
8、针对接口编程,而不是针对实现编程
  • 不将变量类型声明为某个特定的具体类,而是声明为某个接口。
  • 客户程序无序获知对象的具体类型,只需要知道对象所具有的接口。
  • 减少系统中各部分的依赖关系,从而实现“高内聚,松耦合”的类型设计方案。
二、分类
1、从目的分类(GOF)
  • 创建型:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现带来的冲击。
  • 结构型:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击。
  • 行为型:通过类继承或者对象组合来划分类与对象间的职责,从而应对需求变化为多个交互对象带来冲击。
创建型 结构型 行为型
Factory Adapter Interpreter
Template Method
对象 Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Façade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
2、从范围划分
  • 类模式处理类与子类的静态关系。
  • 对象模式处理对象间的动态关系。
3、从封装变化角度对设计模式的分类
  • “组件协作”模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。
    • Template Method(模板模式)
    • Observer / Event(观察者模式)
    • Strategy(策略模式)
  • “单一职责”模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的 结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码, 这时候的关键是划清责任
    • Decorator(装饰器模式)
    • Bridge(桥接模式)
  • “对象创建”模式:绕开“new”来避免对象创建(new)过程 中所导致的紧耦合(编译时依赖具体实现类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作
    • Factory(工厂模式)
    • Abstract Factory(抽象工厂模式)
    • Prototype(原型模式)
    • Builder(建造者模式)
  • “对象性能”模式:面向对象很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。
    • Singleton(单例模式)
    • Flyweight(外观模式)
  • “接口隔离”模式:在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层稳定/间接(微观上比如指针,宏观上比如操作系统、虚拟机、依赖倒置原则)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案
    • Facade(外观模式)
    • Proxy(代理模式)
    • Adapter(适配器模式)
    • Mediator(中介者模式)
  • “状态变化”模式:在组件构建过程中,某些对象的状态经常会变化,如何对这些变化进行有效地管理?同时又维持高层模块的稳定?
    • State(状态模式)
    • Memento(备忘录模式)
  • “数据结构”模式:一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定结构无关的访问,是一种行之有效的解决方案
    • Composite(组合模式)
    • Iterator(迭代器模式)
    • Chain of Responsibility(责任链模式)
  • “行为变化”模式:在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合
    • Command(命令模式)
    • Visitor(访问者模式)
  • “领域规则”模式:在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。
    • Interpreter(解释器模式)

你可能感兴趣的:(设计模式,设计模式)