设计模式笔记

常用的设计模式

个人理解整理,欢迎批评指正

设计模式就是教你面向对象应该怎么玩,设计模式一般不会单独使用,多种设计模式组合使用。
所谓设计模式,就是遇到问题后的一种解决思路;将这些解决方法整合起来就形成了设计模式

设计模式讲究的是思想,有些设计模式实现上看可能类似,但是其表达的意思跟要解决的问题不一样

本文代码:https://github.com/shenwuwu/desigin

设计模式遵循的六大原则

  1. 单一职责SRP :针对一个类而言应该有且仅有一个原因引起类的变更;职责,是指类变化的原因,即实现高内聚低耦合,将不同的职责拆分出不同的类或方法。
  2. 里氏替换原则LSP基础–所有引用基类的地方,必须都可以用子类替换;即在继承关系中,必须保证子类含有父类的所有行为(不能在子类覆盖父类的行为,去提示说子类没有这个功能),并且保证行为的一致性,这样可以保证父类被复用,子类可以扩展。
  3. 依赖倒置原则DIP手段–面向抽象编程;即解决客户端与服务端的解耦,如果需求变更或扩展,服务端可以增加新的实现来完成;所谓倒置,1.正常情况下B要依赖于A,需要A先实现,B里才能放A的引用 2.面向接口编程,如果B要依赖于A,B中可以引用A的接口,而不需要A的实现,这个顺序的倒置。
  4. 接口隔离原则ISP:使用多个专门的接口比使用单一的总接口要好;即对客户端提供的接口,不要对其提供多余客户端不需要的功能。
  5. 迪米特法则LoD:实体之间尽量少的发生相互关系;主要还是为了解耦,可以通过友元类来完成关联。
  6. 开闭原则OCP目标 对扩展开放, 对修改关闭;每次扩展时,不能修改原有逻辑,类似于jdk每次升级时,新增功能去替换原有功能时,使用@Deprecated将旧方法改成不建议使用的状态。

设计模式

  • 创建型:主要用于创建符合需求的对象实例
    1. 工厂模式Factory:用一个对象去创建同一种类型的不同对象的实例
    2. 建造者模式Builder:保证对象内部建造的顺序
    3. 原型模式Prototype:复制、克隆
    4. 单例模式singleton:一个对象只能有一个实例
    5. 有限多例模式:一个对象只能有有限个数的实例
  • 结构型:对象之间的组合结构
    1. 适配器模式Adapter:将一种类型(类型其实就是接口)的对象转换成另外一种类型的对象去使用【这个两种类型是同一类,但是结构不一样】
    2. 装饰器模式Decorate:同源(同一个father)的委派模式就是装饰器模式
    3. 代理模式Proxy:代替被代理的对象去做事(1. 对被代理限制 2. 对被代理静态扩展)
    4. 委派模式Delegate:分发的功能,交给其他的类去做拆分后的事;一个类A持有另一个类/接口B的对象,类A对外提供功能,实际调用B的方法
    5. 桥接模式Bridge:将两个抽象关联起来【不同类型】
    6. 组合模式Composite:树形结构
    7. 门面模式Facade:将流程化的事封装在一起形成一个方法,用这个方法实现整个流程
    8. 享元模式Flyweight:共享对象实例,不需要每次都创建(类似于单例、有限多例模式)
  • 行为型
    1. 策略模式Strategy:过程可选,结果不变
    2. 解释器模式Interpreter:对已定义的内容进行解释(如:实现正则表达式的实现)
    3. 模板方法模式Template Method:流程固定,实现有差异
    4. 责任链模式Chain of Responsibility:存在层级关系,每一层有自己的责任任务,多层构成一个链式处理的行为
    5. 命令行模式Command:将指令或请求进行抽象,并分发该命令或请求给指定的执行人
    6. 迭代器模式Iterator:定制自己的迭代器,可以重写jdk的迭代器实现,像list,set里的迭代器都是重写的
    7. 调节者(中介者)模式Mediator:将两个本没有关系的类,关联起来;使得两个类之间有交互
    8. 备忘录模式Memento:用于备份可能需要还原的待备份对象的属性
    9. 观察者模式Observer:被观察者的动作触发观察者的动作
    10. 状态模式State:对状态进行抽象,通过状态决定动作
    11. 访问者模式Visitor:以访问者类(身份)对需要指定的对象类有不同的表现形式;不同身份的访问者针对同一对象的同一方法,也有不同的表现形式

设计模式之间的关系(图片来源于:《设计模式:可复用面向对象软件的基础》)
设计模式笔记_第1张图片

组合设计模式场景:
1.

spring中的设计模式:

###持续更新…

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