设计原则如何能让你的代码变得更好
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
Ø 使用设计模式的目的:为了代码复用,实现开闭原则,保证代码可读性、可靠性、可维护性等。 实现代码编写的工程化,是软件工程的基石脉络,如同大厦的结构一样。
Ø 那么怎么才能应用设计模式,实现代码复用呢?以开闭原则为目标,实现如下六大原则
Ø 开闭原则
对象(类,模块,函数等等)应该对于扩展是开放,但是对于修改是封闭。遵循这种原则的代码在扩展时并不会改变老代码,因此代码审查、单元测试等质量重点针对扩展代码即可,提升开发效率和质量。
Ø 单一职责原则
一个对象,只有一个引起它变化的原因,即只有一个职责。多个职责耦合在一起,是脆弱的设计,影响复用性。
不好的代码:
int youngest = peopleLst[0] ? peopleLst[0].age : Infinity;
int totalSalary = 0;
for(people p : peopleLst){
if(p.age < youngest){
youngest = p.age;
}
totalSalary += p.salary;
}
好的代码:
代码问题:几行代码执行了两个职责,计算最小年龄、得到总工资,这两个职责没有任何关系,只是共用了一个循环
样例:
public static void main(String[] args) {
int totalSalary = getTotalSalary(peopleLst);
int youngest = getYoungest(peopleLst);
}
private int getTotalSalary(List<People> peopleLst){
int totalSalary = 0;
for(People p : peopleLst){
totalSalary += p.salary;
}
return totalSalary;
}
private int getYoungest(List<People> peopleLst){
int youngest = peopleLst[0] ? peopleLst[0].age : Infinity;
for(people p : peopleLst){
if(p.age < youngest){
youngest = p.age;
}
}
return youngest;
}
Ø 合成/聚合复用原则
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,这样做可以使得成员对象的内部实现细节对于新对象不可见,成员对象的变化对新对象的影响不大,其耦合度相对较低,所以这种复用又称为“黑箱”复用。
不好代码:
public class Student {
private String name;
private int age;
private int centralAthleticAssociation;
private int bloodPressureHigh;
private int bloodPressureLow;
private int height;
}
好代码:
public class PhysicalExaminationReport {
private int centralAthleticAssociation;
private int bloodPressureHigh;
private int bloodPressureLow;
private int height;
}
public class Student {
private String name;
private int age;
private PhysicalExaminationReport physicalExaminationReport;
}
Ø 里氏替换原则
只要有父类出现的地方,都可以用子类来替代,而且不会出现任何错误和异常。遵循这种原则,不会基于子类对父类的非抽象方法任意修改,避免对整个继承体系造成的破坏。
继承关系使用的基础,所以实际编码过程中继承关系会用得相对较少
Ø 接口隔离原则
使用多个专门的接口比使用单一的总接口要好。接口是我们设计时对外提供的契约,通过分散定义多个 接口,可以提高系统的灵活性和可维护性。
不好的代码:
好的代码:
Ø 依赖倒转原则
针对接口编程,不要针对具体实现编程。降低了业务逻辑与算法间的耦合。
不好的代码:
好的代码:
Ø 迪米特法则
又叫作最少知识原则,一个对象应当尽可能少的与其他对象发生相互作用。有利于降低对象之间的耦合,使系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。
前面的代码案例中都遵守了这个原则。
要解决更多、更复杂的问题,设计模式请参考相关书书籍或者专题讨论。
里氏替换原则:
本文来自博客园,作者:易先讯,转载请注明原文链接:https://www.cnblogs.com/gongxianjin/p/16417050.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南