23种设计模式汇总

  第一篇设计模式2019年10月开始,到现在差不多半年的时间了,最后我终于坚持写完了。

  不管写的质量是好是坏【坚持】这件事确实是很困难的。最初的想法是通过写博客来督促自己,让自己把这个学习的过程记录下来,之前都只逛园子,很多东西记录到云笔记。但是云笔记和博客相比缺少一样东西,那就是分享,当别人发现有不对的地方可以指正,带来的点赞啊评论啊会进行正向激励,这样下次学习写东西的时候更有动力(不要说是最大的动力,最大的动力应该是源于自身的充实)。通过这样的正向反馈对自己的学习热情和学习态度都有很大的帮助,当没人反馈的时候也要坚持,因为我们要明白最大的收获是我们自己。

  不过写博客确实费时间,一篇文章得花个2-5小时不等(对于我而言)。首先自己得先领会看懂才能写出来让别人看懂,其次自己得画图、写代码、测试等等,最后通篇写完得注意前后叙述逻辑排版顺序以及专业用词的准确性。当然这个是循序渐进的,我也是初次尝试,很多东西有待提高,学习知识嘛不寒碜。并且通过写的方式,首先学习一遍,写的过程再分析一遍,最后自己阅读调整,这样下来不仅加强了知识的记忆并且对细节的理解也更深刻。至于哪里深刻,这个东西只能自己体会了,很玄学。就像我在学习设计模式的过程中对于之前有些不太理解的设计仿若醍醐灌顶,因为之前接触过的系统可能到最后都没扩展过,所以有些模式并没有发挥它的价值,但是至少我知道了这个地方原来这样设计是为了扩展为了有一个更好的设计。

  之前的文章开始写没有经验,应该给一个目录方便阅读或者把demo代码地址放出来。后面写了几篇才发现,最后想难得改,也不破坏最初的样子就一直写完了。所以在这里对模式进行一个总结吧分类,同时也相当于一个目录,方便查找对应文章。

设计模式书:

 

设计模式基础

  • 抽象
  • 封装
  • 多态
  • 继承

设计模式原则

 

设计原则名称

设计原则简介

遵循原则的设计模式 

单一职责原则

(Single Responsibility Principle,SRP)

类的职责要单一,不能将太多的职责放在一个类中

Head First设计模式——适配器模式

Head First设计模式——组合模式

开闭原则

(Open-Closed Principle,OCP)

软件实体对扩展是开放的,但对修改是关闭的,即在不修改一个软件实体的基础上去扩展其功能

 Head First设计模式——观察者模式

里氏代换原则

(Liskov Substitution Principle,LSP)

在软件系统中,一个可以接受基类对象的地方必然可以接受一个子类对象

 基本原则

依赖倒转原则

(Dependency Inversion Principle,DIP)

要针对抽象层编程,而不要针对具体类编程

Head First设计模式——策略模式

Head First设计模式——装饰者模式

接口隔离原则

(Interface Segregation Principle,ISP)

使用多个专门的接口来取代一个统一的接口

基本原则

合成复用原则

(Composite Reuse Principle,CRP)

在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚

至不使用继承关系

Head First设计模式——策略模式

迪米特法则

(Law of Demeter,LoD)

一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,

那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互

  Head First设计模式——外观模式

 设计模式分类(分类的目的是帮助我们记忆,通过比较不同分类让我们对模式有清晰的概念)

  • 创建型(创建模式涉及到将对象实例化,这类模式提供一个方法,将客户从所需要实例化的对象解耦)

    单例模式(Singleton)

    生成器模式(Builder)
    原型模式(Prototype)
    抽象工厂模式(Abstract Factory)
    工厂方法模式(Factory Method)

  • 行为型(只要是行为模式,都涉及到类和对象如何交互分配职责)

    策略模式(Strategy)
    状态模式(State)
    责任链模式(Chain of Responsibility)
    解释器模式(Interpreter)
    命令模式(Command)
    观察者模式(Observer)
    备忘录模式(Memento)
    迭代器模式(Iterator)
    模板方法模式(Template Method)
    访问者模式(Visitor)
    中介者模式(Mediator)

  • 结构型(结构型模式可以让你把类对象组合到更大的结构中)

    装饰者模式(Decorator)
    代理模式(Proxy)
    组合模式(Composite)
    桥连接模式(Bridge)
    适配器模式(Adapter)
    蝇量模式(Flyweight)
    外观模式(Facade)

 定义设计模式

  设计模式:在某情景下,针对某问题的某种解决方案

  情景:应用某个模式的情况,应该是不断出现的情况。

  问题:某情景下达到的目的,也可以是某情景的约束。

  解决方案:一个通用的设计,用来解决约束,达到目的。

模式示例代码

  https://github.com/XSpringSun/DesignPatternDemo

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结