重构之三设计模式

2021-05-17  本文已影响0人  Java及SpringBoot

3. 重构代码示例讲解(不对外):

代码规范对比:

编码规范扫描对比:

idea analyze-inspect code对比:

新版改造:

4. 重构与设计模式:

软件设计模式的概念

软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

设计模式的意义

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。正确使用设计模式具有以下优点。

设计模式的学习过程

第一阶段:手中无剑,心中无剑

初步掌握一门面向对象编程语言,了解了类、对象、接口等概念。听别人说到“设计模式”感觉特别高大上,自己不太懂,也用不太起来。

第二阶段:手中有剑,心中无剑

四人帮经典23式开始一招一招比划。但此时手中虽有了重剑,却不太能舞起来。主要原因是,刚开始学习设计模式的人,开发经验一般相对较少,此时我们还缺乏实际经历的应用场景去做参考,看着书中的例子很难感同身受,比如我们看到“封装XX变化性”之类的描述很难引起共鸣。而且很有可能模式的描述和场景压根就不太明白。

第三阶段:手中有剑,心中有剑

随着自己的学习和开发经历的丰富,你已经对设计模式有一定理解了。在阅读开源代码,或者身边高手的代码时,你经常可以发现可以对应于某模式,因为类命名会出现设计模式中的术语,Factory, Builder,Strategy等。你逐渐明白了某个模式用在某个地方能起到什么作用,你经常会有一种"Wow"的赶脚。这时你在编程过程中,能够照猫画虎的用设计模式了。

第四阶段:手中无剑,心中有剑

你已经有设计和架构的概念了,这时你已经开始面对一个几万行甚至几十万行的项目,有一天你发现代码已经很难快速响应需求变化了,又没办法推倒重来,所以来重构吧,重构的过程中,一个个设计模式把代码维护中的一个个痛点逐个击破,你对代码的“smell”有了更深刻的理解,你开始对copy-paste代码深恶痛绝,你发现原来重构和设计模式竟然是孪生兄弟。

你开始明白一个长期维护和演化的项目,设计如此之重要。你不自觉地就会主动去翻《重构》、《浮现式设计》、《领域驱动设计》、Bob大叔的《敏捷软件开发》、《企业应用架构模式》等等,虽然你之前可能看过,但此时你看他们的心境和底蕴已经不一样了,你会发现这帮家伙确实很会总结。

最终,你回本溯源,你还是拿起了当初那本《设计模式》,你终于深深地体会到了里面闪烁的智慧,“面向接口编程”,“组合优先继承”,多么朴素的文字,或许很多人都能说出来,但是你确定你现在的理解更加深刻了。

你会发现,此时你手中已经无剑了,你不会想着什么模式列表了,不会想着某个模式重要了。进行一个复杂设计时,不自觉地就从软件开发的终极目标“高内聚低耦合”出发,“面向接口编程”,“组合优先继承”,“创建与使用分离”等认知成为体液反应,结合需求场景,每定义下一个类都有“开放封闭”等各种面向对象设计原则护体,随着项目演进,你能敏锐地嗅到各种代码smell,知道如何考虑现有资源去减少该死的技术债,随时进行着重构。

代码示例讲解:

创建型:

建造者模式
image-20201221153629981.png
工厂模式
image-20201221155923780.png
原型模式、单例模式
image-20201221163142525.png

结构型

装饰、组合模式
image-20201221153815370.png image-20201221151326312.png
装饰、外观模式
image-20201221155539755.png
代理模式
image-20201221163302291.png image-20201221163326790.png

行为型

责任链模式
image-20201221154046964.png image-20201221154207695.png
命令模式
image-20201221164633090.png
策略模式
image-20201221154704983.png image-20201221154837290.png image-20201221154813061.png
模版模式
image-20201221164125044.png
上一篇 下一篇

猜你喜欢

热点阅读