10大设计原则
前言:
它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可复用性、可读性、可维护性。
设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
结论: 不要重复造轮子
什么是面向对象编程
- 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四大特性,作为代码设计和实现的基石。
- 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便的实现面向对象编程四大特性的编程语言。
- 面向对象开发包括面向对象分析 OOA、面向对象设计 OOD、面向对象编程 OOP。
10大设计原则
1.单一职责原则 SRP
实现类要职责单一:如果一段代码块(函数 类 模块)负责多个功能,那么当 A 功能需求发生改变的时候改动了代码,就有可能导致 B 功能出现问题,所以一段代码块只应该负责一个职责。
2.开放-封闭原则 OCP
要对扩展开放,对修改关闭:通过修改老代码来实现新功能可能导致老模块出现 BUG,所以我们应该通过开发新代码块来实现新功能。
3.里氏替换原则 LSP
不要破坏继承体系:程序中的子类应该可以替换父类出现的任何地方并保持预期不变。所以子类尽量不要改变父类方法的预期行为。
4.接口隔离原则 ISP
设计接口的时候要精简单一:当类 A 只需要接口 B 中的部分方法时,因为实现接口需要实现其所有的方法,于是就造成了类 A 多出了部分不需要的代码。这时应该将 B 接口拆分,将类A需要和不需要的方法隔离开来。
5.依赖倒置原则 DIP
面向接口编程:抽象不应该依赖细节,细节应该依赖于抽象。核心是面向接口编程,我们应该依赖于抽象接口,而不是具体的接口实现类或具体的对象。
6.最少知识原则(迪米特原则)LOD
降低耦合度:一个类或对象应该对其它对象保持最少的了解。只与直接的朋友(耦合)通信。
7.组合/聚合复用原则 CRP
多用组合少用继承:尽可能通过组合已有对象(借用他们的能力)来实现新的功能,而不是使用继承来获取这些能力。
8.不要重复你自己 DRY
功能语义重复应该合并,代码执行重复应该删减,代码逻辑重复但语义不同应该保留。
9.尽量保持简单 KISS
尽可能使用简单可读性高的代码实现功能,而不用逻辑复杂、实现难度高、可读性差的方式。
10.不要过度设计你暂时用不到的逻辑 YAGNI
不要过度优化、不要过度预留扩展点、不要设计同事看不懂的代码。
如何评价代码的质量?
- 可读性、可扩展性、可维护性、可复用性、可测试性...
- 高内聚低耦合。
- 善战者无赫赫之功善医者无煌煌之名,大智若愚大巧若拙,真正的好代码并不是用了多少厉害的技术与奇技淫巧,而是看尽人世繁华后的返璞归真,寥寥几笔实现了功能的同时却没有任何个人风格的痕迹,符合代码规范、编程思想、设计模式的代码。
注意事项
知识是死的,而代码是活的,不要用固化的设计模式实现硬套在活的业务逻辑里。
能学以致用是我们的学习目标,但是如果写出来的代码同组的其他人都看不懂,更加影响项目的可维护性和开发效率。所以我们可以少用慎用,但是我们必须掌握其思想。
牢牢掌握设计模式,拿去面试、面试别人、组内分享还是可以震慑群雄的。