设计模式:程序员的魔法咒语手册

下面我们要聊的是程序员界的"九阴真经"——设计模式!它不是哈利波特的咒语书,但能让你的代码像喝了福灵剂一样开挂!🚀

一、什么是设计模式?🤔
面向对象编程常见问题的可复用解决方案——"代码界的乐高说明书"

当你在代码里反复造轮子时,总会遇到似曾相识的bug。这时候设计模式就像个老司机跳出来说:"少年,这个弯道我漂移过38次了,听我的!" 它其实就是前辈们总结的代码搭积木指南,专治各种不服的面向对象疑难杂症!

二、为什么要学?🤷♂️

灵活性:使用设计模式,有助于提供正确的抽象级别,让对象变得松散耦合,使代更易于更改。
可重用性:松散耦合和高内聚的对象和类可以使你的代码更可重用。
共同语言:可以轻松与其他团队成员共享你的代码和思想。
最佳实践:设计模式已成功应用于问题的解决方案。 通过学习这些模式和相关问题,让开发人员学会很多关于软件设计的知识。

(以下场景程序员请对号入座)

  1. 灵活得像猫主子🐈:当你老板第18次改需求时,用设计模式的代码就像乐高积木,拆个零件就能改,不用把整栋城堡炸了重建!

  2. 复用狂魔的福音♻️:还记得你复制粘贴到腱鞘炎发作的那天吗?高内聚低耦合的代码就像可重复使用的魔法卷轴

  3. 程序猿的社交货币💬:当同事说"这里该用观察者模式",你再也不会以为他在讨论天文望远镜了!

  4. 最佳实践的防秃指南👨🦲:23种经典解法,总有一款能让你少掉几根头发(发际线守护者认证)

"整洁代码靠规范,优雅代码靠模式,而能跑起来的代码...靠玄学"

三、设计模式六大原则💍
(程序员的恋爱法则)

  1. 单一职责:就像不能同时约会三个对象(容易翻车)
  2. 开闭原则:支持对象整容,但别换身份证(对扩展开放,对修改关闭)
  3. 里氏替换:子类要像完美备胎,随时上位还不让系统崩溃
  4. 接口隔离:别当中央空调,专用接口更清爽
  5. 依赖倒置:上层建筑要像霸道总裁:"我不管你怎么实现,我只要结果!"
  6. 迪米特法则:对象之间要保持社交距离(最少知道原则)

原则的遵守并不是是和否的问题,而是多和少的问题,需要根据实际情况灵活运用。
记住!原则就像海绵宝宝的蟹黄堡秘方——可以微调,但不能做成黑暗料理!


设计模式应用能力图鉴.png

四、设计模式全半家桶🍱常用模式
(附赠点菜指南)

🍳【创建型模式】——对象出生办
对类实例化过程进行抽象,隐藏具体创建过程,让创建与使用分离

  • 工厂模式:代码界的奶茶店 🥤
    "要Java还是Python?3分糖还是全糖?"(悄悄说:其实都是同一个机器做出来的)
    使用指南:
    一个类不知道它所需要的对象的类;一个类通过其子类来指定创建哪个对象;将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定。

    page110image14366368.jpg

  • 建造者模式:乐高大师的秘密 🧱
    组装玛莎拉蒂就像拼乐高:先装方向盘,再加涡轮增压,最后贴秋名山车神贴纸!
    使用指南:
    需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
    需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
    隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

    page93image8013088.jpg

🏗️【结构型模式】——代码整容师
将类或者对象结合在一起形成更大的结构,在系统中尽量使用关联关系来替代继承关系

  • 装饰者模式:魔法师的外套 👗
    给对象穿皮肤:今天穿缓存外套,明天套日志腰带,代码时装周走起!
    使用指南:
    动态地给一个对象增加一些额外的职责,装饰模式比生成子类实现更为灵活。

    page163image3807136.jpg

  • 代理模式:明星经纪人模式 🌟
    想见对象本人?先过经纪人这一关!防火墙、缓存、权限检查三件套备齐
    使用指南:
    给某一个对象提供一个代理,并由代理对象控制对原对象的引用,他们集成相同的接口。

    page65image3806688.jpg

  • 组合模式:俄罗斯套娃的艺术 🪆
    管你是单个按钮还是整个面板,在我眼里都是同一套操作!
    使用指南:
    是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

    page29image1834528.jpg

🎭【行为型模式】——对象交际花
在不同的对象之间划分责任和算法的抽象化.相互协作以完成其中任何一个对象都单独无法完成的任务。

  • 观察者模式:代码界吃瓜群众 👀
    "八卦中心发微博啦!所有订阅者自动转发!"
    使用指南:
    定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

    page47image3813408.jpg

  • 策略模式:算法全家桶 🍱
    支付时随意切换:支付宝宝剑、微信宝剑、砍刀支付...(老板说最后一个不能用)
    使用指南:
    定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化。

    page144image3804672.jpg

五、架构设计的神助攻 🛠️

设计模式对架构设计的帮助:

  1. 边界划分术:把代码分成霸道总裁层(抽象)和打工人层(实现)
  2. 解耦大法:对象关系像同事——表面合作,私下随时能换人
  3. 倒置依赖:让上层代码像甲方爸爸:"我不管你怎么实现,周五必须上线!"


    依赖倒置.png

最后送上程序员生存法则
"不要重复造轮子,除非你想发明时空穿梭机!"

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容