设计模式为了解决什么痛点?
它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了
提高代码的可复用性、可读性、可维护性
。
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。不要重复造轮子
。
什么是面向对象编程
面向对象编程
是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四大特性,作为代码设计和实现的基石。面向对象编程语言
是支持类或对象的语法机制,并有现成的语法机制,能方便的实现面向对象编程四大特性的编程语言。面向对象开发
包括面向对象分析 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种行为型
- 创建型:
抽工单建原型
- 抽象工厂、工厂、单例、建造者、原型
- 结构型:
桥代理装饰适配器,享元组合成门面
- 桥接、代理、装饰器、适配器、享元、组合、门面(外观)
- 行为型:
观察模板迭代的状态,命令中介解释职责链,访问策略备忘录
- 观察者、模板、迭代、状态、命令、中介者、解释器、职责链、访问者、策略、备忘录
创建型设计模式
封装对象创建过程,将对象的创建和使用解耦
单例模式
应用场景
处理资源访问冲突、用来创建全局唯一类。
解决方案
- 懒汉式:用到的时候才创建(场景:不一定需要用到、创建代价大、延迟加载、需要快速启动系统)。
- 饿汉式:系统启动时创建(场景:必定用到、临时创建影响响应速度)。
- 多例:同一类的固定个数相同实例。
转载自:乐字节