- 贯穿设计模式:用一个电商项目详解设计模式
- 伟山育琪
- 2546字
- 2024-12-28 11:44:52
前言
致敬所有程序员
我们生而平凡,却因思维和双手而闪亮。人有居庙堂,人有守边疆,或许没有聚光灯下的万众瞩目,没有绝伦逸群的青史留名,但总有那一隅角落,有我们挥洒汗水和青春的字里行间,千家灯朦胧,万里夜长空,致敬最美夜行者。
然,人间没有永恒的夜晚,世界没有永恒的冬天,程序改变世界。
定,春风和煦,韵律协调,击壤而歌,同忧同行,为太平故,负重前行,为静好故。
终,世界以你为荣。
益者三友,损者三友。友道,友谅,友多闻,益矣。友便辟,友善柔,友便佞,损矣。
愿,君以书为友,日以数篇为率,书遂大进。
盼,平生于书,未尝苟且,或达人简札,少不当意,必再三易之不厌。
遂,愈老而愈益精妙。
士有诤友,则身不离于令名。
期,君视吾为诤友,交友投分,切磨箴规,同心而共济,始终如一。
虽,不可即高山流水,仍盼鼓琴以为众善听,为君子交,淡以亲,相知无远近,万里尚为邻。
终,达之所成亦不离道。
谨以此书,致敬所有程序员,致敬那无数黑夜中的呜咽与怒吼,致敬最卑微的程序梦,致自己,致青春——You look great today!
学习设计模式普遍存在的问题
以下是来自众多从业者对设计模式的看法和疑问。
· 设计模式真的有用吗?你敢不敢告诉我你项目里用了什么设计模式?
· 看设计模式有什么用?天天造车工厂、肯德基点餐、披萨制作……哎!
· 除了工厂和单例,兄弟们有没有真实用过其他设计模式的?
· 可能只有做架构代码的时候才会用设计模式吧,就像Spring源码那样用了不少设计模式,自己写的项目里感觉没什么可以用的点。
· 可能面试官也没在项目里用过几个,就是随便问问(偷笑)。
……
上边所列举的点是否也正是你的内心想法呢?设计模式给大部分读者的感觉就是“神秘”“高端”“不接地气”“学会容易落地难”。好不容易有几个能够落地到项目中的设计模式,还被框架代码完美封装了。比如:
· Spring的Bean管理:在不显示使用Scope注解为prototype的前提下,默认情况就是使用的单例Bean,想自己写单例,Spring不给你机会。
· 迭代器模式:JDK中List源码也好,Map源码也好,这些常用的数据结构都为我们提供了迭代器——iterator,想自己写迭代器,要先过JDK这关。
· 观察者模式:很多事件的监听场景适合使用该设计模式,可无奈的是Redis提供了发布/订阅功能;Spring框架提供了Listener注解;更多情况下,项目中要完成事件消息的传递,必然会引入消息中间件,如RabbitMq、Kafka;使用Spring Cloud Alibaba的企业,更多地会使用RocketMq进行事件消息的传递,一个监听场景被轻易地修改为了以中间件为基础的消息传递和消息接收,而且耦合度还降低了。叹息自己一身武艺,却无用武之地。
……
难道这辈子自己只能写工厂设计模式了吗?还是简单工厂模式……
内容简介
· 不切实际的代码示例(如造车工厂、肯德基点餐、披萨制作、适配USB接口、装饰咖啡加牛奶糖等)请绕行。
· 不切实际的设计模式原则描述(如老师、学生单一职责原则划分,驾驶不同品牌车辆的依赖倒置原则设计等)请绕行。
很抱歉以这种形式进行本书内容简介的开场,也希望广大读者给予谅解。笔者认为,如果依然以如此虚幻的示例展开对设计模式的讲解,那么本书也就失去了它原有的意义。因为在网络开放的当下,很多免费的博客论坛中,这种设计模式的代码示例比比皆是,我们何必浪费金钱和时间在这本书上?而我们作为开发行业的从业者,迫切需要的并不是虚无缥缈,而是真正可以落地的设计模式。
本书所有设计模式的代码编写,全部基于互联网项目核心需求,杜绝不切实际的代码示例,让设计模式融入真实的项目开发之中,让设计模式为我们的项目效力。即便是第1章内容对设计模式六大原则(合成复用原则在1.4节单独说明)的讲解,依然以热门源码(如JDK8源码、Spring5源码)为示例展开。
除第1章介绍设计模式的原则和分类,以及第12章进行结语以外,其他章节依次以互联网项目核心模块为基准,将设计模式融入核心模块的开发之中,整个过程犹如一个整体项目需求,完成设计模式的融入。
从第2章到第11章,依次对核心项目模块进行设计模式的融入,本书所涉及的核心模块如下。
· 多种类第三方账号登录。
· 商品类目管理。
· 商品订单状态转化与处理。
· 多种类第三方支付。
· 业务投放。
· 平台积分更新及红包发放。
· 开具电子发票。
· 朋友代付。
· 订单审计日志设计。
· ES日志查询。
本书的目标是让设计模式在工作中的使用成为可能,让我们对设计模式的学习不仅仅停留在表面上。希望本书对设计模式的实践和落地,能够引起读者共鸣,能够为读者在未来的工作中提供些许参考。
如何学习本书
对于设计模式的初学者,笔者建议从第1章开始阅读,了解设计模式的原则及分类,对设计模式有一个全局概念之后,再依次进行后续章节的学习。对于已经了解设计模式的读者,可以根据自身情况跳过第1章的学习,直接从第2章进行学习。
除此之外,笔者对阅读本书的读者仍有以下建议:
①本书所涉及的所有代码示例,可以扫描书中的“全书源码”二维码获取。但建议读者不要提前获取全部代码,而是跟随章节的内容亲自进行代码的编写,体会设计模式的精妙之处。
②本书涉及的相关第三方组件的安装包及安装方式,如RabbitMq、Apollo等,均可扫描前言中的配套二维码获取。同时,为了感谢读者的支持和认可,本书赠送“Spring源码视频资料”,由笔者亲自录制,依然在前言中通过二维码处获取。
③希望广大读者理解,一个项目需求可以有多种代码实现方式,或简单,或复杂,或单一直接,或可扩展。实现方式的恰当与否,完全视业务场景以及对代码的封装性、扩展性、可维护性等一系列要求而定。本书的内容只是多种实现方式中的一种,欢迎读者能够将自己的想法传达给我,我们互相讨论,共同进步。
④本书与传统的设计模式讲解顺序有所不同,传统的讲解顺序会按照设计模式的三大类型(创建型、结构型、行为型)进行讲解,而本书以互联网项目需求为核心展开设计模式讲解,与传统的讲解方式大相径庭,希望读者能够调整学习思路和方式。
接下来让我们开启这次旅程吧,一起进步,加油!
书友技术群
笔者为广大书友创建了QQ书友技术群,我们不仅可以讨论本书涉及的技术内容,还可以讨论行业内任何有价值的技术,共同创建一个良好的技术交流环境。笔者也会经常在群中为大家分享更多的学习资料,并进行技术交流。请扫描下方二维码入群。
本书提供了详细的配套资料,读者可以扫描下方的二维码进行下载。
全书源码
[第6章]MySQL 5.6.10安装包
[第6章]Apollo quick start
Spring源码视频资料
[第7章]RabbitMq安装包
[第7章]rabbit.queue.create-0.0.1-SNAPSHOT
[第11章]es.demo.server-0.0.1-SNAPSHOT