• 设计模式的理解


    先重提一下课本上关于设计模式的定义:设计模式是一套被反复使用、多数人知晓的、经过分类编排的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。设计模式的出现让我们可以站在前人的肩膀上,通过一些成熟的设计方案来指导项目的开发与设计,更加方便得复用成功的设计和体系结构。

    初看这个概念,确实有点抽象。下面谈谈我学完设计模式后对设计模式的理解。

    没学设计模式之前,不明白设计模式是什么东西,接触设计模式之后,虽然知道了设计模式是什么,但是不明白这个东西将来在开发实践中有什么实际用处,所以刚开始学习设计模式的时候一直处于一种懵懵懂懂的状态。直到看到某位大佬的一句金句——设计模式是为了抵御需求变更带来的影响,或者说把影响降到最低。这句话对我来说真的是醍醐灌顶,让我瞬间明白了设计模式的实际作用。设计模式的运用提高了程序的可维护性和可扩展性,当产品经理提需求时把自己的代码改动降到最低。把握这个初衷后再来理解各种设计模式就会更加通透,也更能体会到到设计模式的重要性和价值,也会意识到这样宝贵的知识绝对不能落下,不学就是损失。明白了学习设计模式的意义,才有了学习的目标性。有目的的学习,才能提高学习效率,才能最大化吸收知识的精华。

    简单来说,就是大佬们总结了23个套路,面对不同的需求场景,考虑使用不同的套路,避免将来被开发经理或者自己坑,一个新的需求上来,发现需要对系统中的代码做出较大改动,有时甚至需要把代码重构。这就是没有使用套路的下场,使用套路后,提前设计编排,考虑到以后的可维护性和可扩展性,这样大部分新需求都不会对原有代码做出较大改动。他好你也好,大家好才是真的好。果然是自古深情留不住,唯有套路得人心,编程的世界也不例外。
    提前把结构设计好,降低需求变更带来的影响。

    23种设计模式分为三大类,创建型、结构型和行为型,这三大类设计模式涵盖了编程的大部分运用场景。编程过程可以简单分成三个大块,创建对象、使用对象的功能、对象之间相互通信协作完成一个任务。设计模式的三个大类,就分别对应了编程的三个部分。

    创建复杂对象时,应该考虑不要在程序中直接编写创建对象的内部逻辑,创建型设计模式可以使得编码者可以不需要关心创建对象的内部细节,能够比较容易的应对类的增加,有效的提高程序的扩展性和可维护性,程序中不必书写复杂的创建过程,从而提高了程序的可读性,降低了程序员的开发难度,也就提高了开发效率。

    当我们关注如何将现有类或者现有对象组织在一起形成形成更加强大的结构时,可以考虑使用结构型模式,比如使用适配器模式对不兼容的接口进行适配,使得这个原本不可用的接口变得可用,典型的例子就是电脑的转接头,不同类型的电脑想要连接在一起就需要一个转接头。

    当我们关注系统中对象之间的相互交互,想要提高对象之间通信与协作的效率时,像职责链模式这样的行为型模式就可能非常有用了。比如职责链模式,请求的发起者不需要知道谁能处理这个请求,只需把这个请求交一个固定的人或对象,如果这个对象不能处理他会自动向下传递,直到有人处理为止。否则请求发起者在发现当前处理者无法处理这个请求,又重新去找下个处理者,这样效率是非常低的。使用职责链模式,就能实现请求发起者和请求处理者之间的解耦,请求发起者无需知道最终是谁处理了这个请求,只关心这个请求是否被处理了以及处理的结果。

    从工厂方法模式到单例模式,从装饰设计模式到观察者模式,每个设计模式都有自己的优缺点,每个模式都有自己的最佳适用场景,没有包治百病的良方,也没有没有万能的设计模式,扬长避短地在不同的场景选用不同的模式,才能最大化发挥设计模式的作用。

    设计模式的一个典型应用就是现今互联网中的各种web开发框架,比如Sping, Spring Boot, SpringMVC等等。用过这些框架的同学都应该有一种体会就是,非常人性化,简单易用,节省时间,提高开发效率。一些看似复杂的操作只需很少的代码或者配置即可完成,比如:在配置文件中简单配置可以即可完成对象的创建,通过加事务注解即可将该段程序控制在一个事务中执行,甚至可以自定义各种注解,几乎每个框架的可扩展性都非常高。

    而这些开发框架之所以能这么简单易用,就是因为它们底层使用了大量的设计模式,比如通过组合模式解析xml配置文件;通过观察者模式完成依赖的自动更新;通过工厂方法模式提高创建对象的效率以及可维护性;通过动态代理模式完成各种切面编程,从而在面向对象编程的基础上进一步提高程序的复用率;通过适配器模式对各种功能接口进行适配,使得我们完成一个功能可以有非常多的接口选择,大大方便了我们的使用;还有通过装饰设计模式给现有类动态增加功能,等等。正是通过各种设计模式的合理设计和运用,框架的易用性、开发效率以及程序的执行效率才逼近于一个近乎完美的程度。

    最后想说,正如课本的作者刘伟在序言中说到的那样,有了设计模式,我们的软件将变得更像一个艺术品,而不是一堆堆难以维护和重用的代码。

  • 相关阅读:
    PaddleOCR服务部署-并通过Java进行调用
    工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端
    php将数组中的最后一个元素放到第一个
    数据集笔记:杭州地铁刷卡数据
    设计模式——15. 模板方法模式
    Untiy 使用RotateAround()方法实现物体围绕某个点或者某个物体旋转
    Python实现SSA智能麻雀搜索算法优化支持向量机分类模型(SVC算法)项目实战
    Python(1):Python基础知识
    SpringBoot核心知识点总结【Spring Boot 复习】
    数据结构实战开发教程(一)数据的艺术、理解程序的本质、算法的时间复杂度
  • 原文地址:https://blog.csdn.net/qq_41767116/article/details/127438212