【设计模式】这样学也太简单了吧!——上

23 篇文章 0 订阅
21 篇文章 0 订阅

设计模式为了解决什么痛点?

它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可复用性、可读性、可维护性
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
不要重复造轮子

什么是面向对象编程

  • 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四大特性,作为代码设计和实现的基石。
  • 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便的实现面向对象编程四大特性的编程语言。
  • 面向对象开发包括面向对象分析 OOA、面向对象设计 OOD、面向对象编程 OOP。

10大设计原则

1.单一职责原则 SRP

实现类要职责单一:如果一段代码块(函数 类 模块)负责多个功能,那么当 A 功能需求发生改变的时候改动了代码,就有可能导致 B 功能出现问题,所以一段代码块只应该负责一个职责。

2.开放-封闭原则 OCP

要对扩展开放,对修改关闭:通过修改老代码来实现新功能可能导致老模块出现 BUG,所以我们应该通过开发新代码块来实现新功能。

3.里氏替换原则 LSP

不要破坏继承体系:程序中的子类应该可以替换父类出现的任何地方并保持预期不变。所以子类尽量不要改变父类方法的预期行为。

4.接口隔离原则 ISP

设计接口的时候要精简单一:当类 A 只需要接口 B 中的部分方法时,因为实现接口需要实现其所有的方法,于是就造成了类 A 多出了部分不需要的代码。这时应该将 B 接口拆分,将类A需要和不需要的方法隔离开来。

5.依赖倒置原则 DIP

面向接口编程:抽象不应该依赖细节,细节应该依赖于抽象。核心是面向接口编程,我们应该依赖于抽象接口,而不是具体的接口实现类或具体的对象。

注意:上面的 SOLID 又称为5大设计原则

6.最少知识原则(迪米特原则)LOD

降低耦合度:一个类或对象应该对其它对象保持最少的了解。只与直接的朋友(耦合)通信。

7.组合/聚合复用原则 CRP

多用组合少用继承:尽可能通过组合已有对象(借用他们的能力)来实现新的功能,而不是使用继承来获取这些能力。

8.不要重复你自己 DRY

功能语义重复应该合并,代码执行重复应该删减,代码逻辑重复但语义不同应该保留

9.尽量保持简单 KISS

尽可能使用简单可读性高的代码实现功能,而不用逻辑复杂、实现难度高、可读性差的方式。

10.不要过度设计你暂时用不到的逻辑 YAGNI

不要过度优化、不要过度预留扩展点、不要设计同事看不懂的代码。

如何评价代码的质量?

  • 可读性、可扩展性、可维护性、可复用性、可测试性...
  • 高内聚低耦合。
  • 善战者无赫赫之功善医者无煌煌之名,大智若愚大巧若拙,真正的好代码并不是用了多少厉害的技术与奇技淫巧,而是看尽人世繁华后的返璞归真,寥寥几笔实现了功能的同时却没有任何个人风格的痕迹,符合代码规范、编程思想、设计模式的代码。

怎样形成长期记忆?

  • 想办法把零散的知识点串联起来记忆
    • 自顶向下形成金字塔结构记忆。
    • 编成关键字口诀记忆。
  • 得意忘形
    • 将知识的精华枝干提取出来强化记忆,去粗取精。
  • 学而不思则罔,思而不学则殆
    • 深度思考能将他人的知识真正转化成自己的。
  • 学而时习之,不亦说乎
    • 第一次学会只是脑海中的短时记忆,需要多次复习强化才能形成长期记忆。

注意事项

知识是死的,而代码是活的,不要用固化的设计模式实现硬套在活的业务逻辑里。
能学以致用是我们的学习目标,但是如果写出来的代码同组的其他人都看不懂,更加影响项目的可维护性和开发效率。所以我们可以少用慎用,但是我们必须掌握其思想。
牢牢掌握设计模式,拿去面试、面试别人、组内分享还是可以震慑群雄的。

23种设计模式速记

  • 速记:5、7、11、23都是奇数
    • 5种创建型
    • 7种结构型
    • 11种行为型
  • 创建型:抽工单建原型
    • 抽象工厂、工厂、单例、建造者、原型
  • 结构型:桥代理装饰适配器,享元组合成门面
    • 桥接、代理、装饰器、适配器、享元、组合、门面(外观)
  • 行为型:观察模板迭代的状态,命令中介解释职责链,访问策略备忘录
    • 观察者、模板、迭代、状态、命令、中介者、解释器、职责链、访问者、策略、备忘录

创建型设计模式

封装对象创建过程,将对象的创建和使用解耦

单例模式

应用场景

处理资源访问冲突、用来创建全局唯一类。

解决方案

  • 懒汉式:用到的时候才创建(场景:不一定需要用到、创建代价大、延迟加载、需要快速启动系统)。
  • 饿汉式:系统启动时创建(场景:必定用到、临时创建影响响应速度)。
  • 多例:同一类的固定个数相同实例。


转载自:乐字节

求关注
欢迎大家关注我的 B站账号
B站账号
如果内容有帮到你,欢迎大家点赞、收藏 + 关注

学习交流群
交流群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值