文章目录

  • 一起学设计模式 - 一起开始设计模式的修炼之路
    • 1.为什么要学设计模式
    • 2.设计模式的六大原则
      • 2.1 单一职责原则(Single responsibility principle)
      • 2.2 开闭原则(Open Close Principle)
      • 2.3 里氏替换原则LSP(Liskov Substitution Principle)
      • 2.4 依赖倒转原则(Dependence Inversion Principle)
      • 2.5 接口隔离原则(Interface Segregation Principle)
      • 2.6 迪米特法则(Demeter Principle)
    • 3.常见的三大设计模式分类
      • 3.1 创建型模式
      • 3.2 结构型模式
      • 3.3 行为型模式
    • 4.设计模式使用的一点心得

一起学设计模式 - 一起开始设计模式的修炼之路

 首先如果大家能够点进来看到我这篇博客的话还是十分感谢大家,不管是支持还是质疑最起码都是我人生中宝贵的财富。回首过往,在开始工作进入IT这行也已经三年多了,写博客的习惯也一直坚持了下来,还是很感激过去的自己的。

 如果大家看过我的博客,应该会发现之前我的博客大部分都是一些工作中比较实用、常用的技术的入门学习和使用。这确实也是我整个学习计划前半部分的一个环节,前面三年我更多的专注于公司交给我的工作、更多地专注于业务以及一些常见使用场景的技术的学习。

 经过这几年养成的习惯,已经对如何去学习一项新技术有了自己的学习计划和方案。最近这几年除了继续学习更多的前沿技术以外,我会把更多的精力放在一些宏观意义的进步上,比如设计模式的理解和使用、源码的阅读和理解、框架的深入剖析。

 源码的阅读其实已经开始了一段时间,但是还没有完全形成一个自己的体系,后面有机会的话我会努力把自己吸收的东西积极整理出来和大家分享讨论、共同进步。那么这里就先和大家一起来学习设计模式

1.为什么要学设计模式

 其实大家作为开发人员的话,多多少少都听过设计模式甚至去看过设计模式。我们更多的是在各种框架的源码中才能见到其真容,但总觉得在实际的开发过程中使用的话有一点心有余而力不足。这其实大概率就是我们对设计模式的理解有偏差或者不够深刻。

 那么要说为什么要学设计模式的话,首先就得了解设计模式到底是什么?

 我们在各种博客、论坛里面查一下设计模式是什么大概都是上面这段话。单从这段话确实很难理解设计模式到底具体是一个什么东西。我有幸看到过这么一段话,我觉得对于设计模式的概括还是比较合理的:设计模式是一套代码设计「经验的总结」。项目中「合理的」运用设计模式可以「巧妙的解决很多问题」,这句话出自于【程序员经常说的「设计模式」到底是什么?】。

 作者的几句话总结的我觉得挺到位,这里借用一下作者的描述:

  1. 经验的总结:抱着「代码虐我千百遍,我待代码如初恋」的心态,最终得出来的「套路」。
  2. 合理的:要对设计模式的使用场景有一定的认识后才使用,「不要滥用」。如:输出一句“hello world”,非要强行给加上各种模式。
  3. 巧妙的解决了很多问题:被广泛应用的原因。

 其实我们去使用设计模式最根本的原因就是为了代码的复用性,以及可维护性。那么如何做到这几点就和接下来要介绍的六大原则有关了。

2.设计模式的六大原则

 设计模式是建立在设计原则的基础之上的。在学习设计模式之前,我们有必要对这些设计原则先做一下了解。

 使用设计模式的核心就是为了让代码有更好的复用性、可读性、可靠性和可维护性。因此也就诞生了很多软件设计的原则,而这里面六大原则就是我们需要去了解和掌握的。

 而将六大原则的英文首字母拼在一起就是SOLID(稳定的),所以也称之为SOLID原则

2.1 单一职责原则(Single responsibility principle)

 该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。

  1. 思想:一个类只负责一个功能领域中的相应职责。就一个类而言,应该只有一个引起它变化的原因。是实现高内聚、低耦合的指导方针。
  2. 目的:类的复杂性降低,可读性提高,可维护性提高。

2.2 开闭原则(Open Close Principle)

 1988年,勃兰特·梅耶(Bertrand Meyer)在他的著作《面向对象软件构造(Object Oriented Software Construction)》中提出了开闭原则,它的原文是这样:“Software entities should be open for extension,but closed for modification”。

  1. 思想:软件模块对扩展开放,对修改关闭。
  2. 举例:在程序需要进行拓展的时候,不能去修改原有的代码,而是通过新增代码实现一个热插拔的效果(热插拔:灵活的去除或添加功能,不影响到原有的功能)
  3. 目的:使程序的扩展性好,易于维护和升级。

2.3 里氏替换原则LSP(Liskov Substitution Principle)

  1. 思想:里氏代换原则是继承复用的基石。任何基类可以出现的地方,子类一定可以出现;在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
  2. 目的:对实现抽象化的具体步骤的规范。

2.4 依赖倒转原则(Dependence Inversion Principle)

  1. 思想:是开闭原则的基础,针对接口编程,依赖于抽象而不依赖于具体。高层模块不应该依赖低层模块,二者都应该依赖其抽象。
  2. 举例:以计算机组成为例。无论主板、CPU、内存、硬件都是在针对接口进行设计的。
  3. 目的:降低模块间的耦合。

2.5 接口隔离原则(Interface Segregation Principle)

  1. 思想:使用多个隔离的接口,而不是用单个接口导致依赖多余不需要的功能。
  2. 举例:比如登录、注册是属于用户模块的两个接口,比放在一个接口更好。
  3. 目的:提高程序设计灵活性,降低类之间的耦合度。

2.6 迪米特法则(Demeter Principle)

 1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一[Booch]等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。

  1. 思想:最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。类之间的耦合度越低,就越有利于复用,可通过引入一个合理的第三者来降低现有对象之间的耦合度。
  2. 举例:一个类公开的public属性或方法越多,修改时涉及的范围也就越大,变更所引起的风险扩散也就越大。
  3. 目的:降低类之间的耦合,减少对其他类的依赖。

3.常见的三大设计模式分类

 在真正开始学习设计模式之前,我们先来和常见的设计模式混个脸熟。这里主要分为三大类。

3.1 创建型模式

 提供了一种在创建对象的同时隐藏创建逻辑的方式,使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
 常用:工厂模式、抽象工厂模式、单例模式、建造者模式。
 不常用:原型模式。

3.2 结构型模式

 关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
 常用:适配器模式、桥接模式、装饰器模式、代理模式。
 不常用:组合模式、外观模式、享元模式。

3.3 行为型模式

 特别关注对象之间的通信。
 常用:责任链模式、迭代器模式、观察者模式、状态模式、策略模式、模板模式。
 不常用:备忘录模式、命令模式、访问者模式、中介者模式、解释器模式。

4.设计模式使用的一点心得

 看到这里大家应该也知道了,设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

 而使用设计模式则更多是为了重用代码、让代码更容易被他人理解、保证代码可靠性。但是设计模式也不是百利而无一害,在我刚开始学习设计模式的时候,总是希望在任何地方使用上设计模式,这就是当时我没有深入理解设计模式带来的一种滥用思想。非但没有达到设计模式的使用目的,还浪费了不少时间。

 而如果一个项目大量采用了设计模式,对于另外不熟悉设计模式或者是刚接手该业务的同事来说那也是一场无妄之债,大大地加大了理解的难度。所以如何合理地用好设计模式,是一门学问,而这一切就需要我们真正去理解设计模式才能够做到。

一起学设计模式 - 一起开始设计模式的修炼之路相关推荐

  1. 学了那么多年设计模式依然不会用!那可真蠢!

    什么是设计模式? 设计模式(Design Pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用. 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是 ...

  2. 讲故事,学(AHK)设计模式—观察者模式

    讲故事,学(AHK)设计模式-观察者模式 对象间的联动--观察者模式 观察者模式概述 观察者模式定义 讲故事,学设计模式 AutoHotkey代码 C++代码 JAVA代码 观察者模式总结 主要优点 ...

  3. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  4. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  5. 设计模式总结篇(为什么要学习设计模式,学习设计模式的好处)

    版权声明:转载必须注明本文转自晓_晨的博客:http://blog.csdn.net/niunai112 在学习完设计模式后,LZ想告诉大家: 对于一名工作不久的程序员来说,学习设计模式是非常有必要的 ...

  6. 备战面试日记(3.4) - (设计模式.23种设计模式之行为型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.12 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文 ...

  7. Java设计模式—单例设计模式(Singleton Pattern)完全解析

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...

  8. 设计模式学习1:设计模式简述和设计模式原则

    设计模式简述 什么是设计模式? 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 设计模式的目的: 代码高可用(相同作用的代码能重复 ...

  9. java api中的设计模式_Java API 设计模式之策略(Strategy)

    策略设计模式与状态设计模式相类似.我们提到过,状态设计模式包含一个状态对象,该对象封装一个上下文对象的状态.策略设计模式包含一个策略对象.该对象与状态设计模式的状态对象相类似.它们之间的关键不同在于: ...

最新文章

  1. computer science sticker
  2. 在csdn上关于Silverlight有用文章收集
  3. 清除number输入框的上下箭头
  4. CRM and Saptest1 Fiori UI共存的一个典型例子
  5. C和指针之预处理器之普通c/c++文件的编译过程
  6. c语言高低位拷贝_C语言中的大小端转换与高低位颠倒
  7. 万字图解Java多线程,不信你学不会!
  8. php源码微信快速登陆,PHP实现微信开放平台扫码登陆源码下载
  9. tomcat启动war包_不用下载tomcat,maven插件直接运行war包,真香
  10. PNP8550(3.3V DC蜂鸣器) - 原理图系列
  11. 编译win10的WSL2内核(windows subsystem linux)
  12. 190716每日一句, 勇于尝试,创造属于自己的时机
  13. 51单片机-PASCAL语言开发环境搭建
  14. Java中的正则表达式
  15. 软件著作权申报中60页标准代码文档
  16. 洛谷P1600 天天爱跑步
  17. 几个Python小案例, 爱上Python编程!
  18. 嵌入式编程与软件编程思想不同浅见
  19. ConstraintLayout中Chains和Guideline的使用
  20. C++ 静态成员变量和静态成员函数

热门文章

  1. 解决C/C++报错error: cannot pass objects of non-trivially-copyable type ‘std::string’问题
  2. 数据分析 --- day10python基础
  3. 直立车想节能——2020全国大学生智能车车竞赛经验记录之梦的开始
  4. 三年java现在还是菜的不行_你java开发几年还是那么菜是因为你没有做到这些
  5. 精美网页设计案例_用户体验设计的精美艺术
  6. vue 禁用滚动条 锁定屏幕
  7. 【智能产品方案】智能跳绳方案开发
  8. 带你认识什么是一级指针、二级指针、三级指针
  9. php.ini 关闭输出缓冲,php 输出缓冲 Output Control用法实例详解
  10. CKA考试题梳理---加油,骚年 记得点赞收藏