网站首页 > 精选教程 正文
一、单一职责原则(SRP)
1、定义
一个类只负责完成一个职责或者功能。
2、为什么要遵循该原则
为了实现代码高内聚、低耦合,提高代码的复用性、可读性、可维护性。
3、什么时候要用到该原则
类中的代码行数、函数或者属性过多;
类依赖的其他类过多,或者依赖类的其他类过多;
私有方法过多;
比较难给类起一个合适的名字;
类中大量的方法都是集中操作类中的某几个属性。
4、一个可量化的标准
一个类的代码行数最好不能超过 200 行,函数个数及属性个数都最好不要超过 10 个。
二、开闭原则(OCP)
1、定义
对扩展开放、对修改关闭;
添加一个新的功能,应该是通过在已有代码基础上扩展代码(新增模块、类、方法、属性等),而非修改已有代码(修改模块、类、方法、属性等)的方式来完成。
2、为什么要遵循该原则
扩展性是代码质量最重要的衡量标准之一。在 23 种经典设计模式中,大部分设计模式都是为了解决代码的扩展性问题而存在的,主要遵从的设计原则就是开闭原则。
3、如何遵循该原则
时刻具备扩展意识、抽象意识、封装意识;
要多花点时间思考,事先留好扩展点,以便在未来需求变更时,在不改动代码整体结构、做到最小代码改动,将新的代码灵活地插入到扩展点上。
4、通常如何提高代码的扩展性
多态、依赖注入、基于接口而非实现编程,以及大部分的设计模式(比如,装饰、策略、模板、责任链、状态)。
三、 里式替换原则(LSP)
1、定义
子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。
2、为什么要遵循该原则
可以用来指导继承关系中子类该如何设计,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑及不破坏原有程序的正确性。
3、怎样遵循该原则
子类不能违背父类声明要实现的功能;
子类不能违背父类对输入、输出、异常的约定;
子类不能违背父类注释中所罗列的任何特殊说明。
四、接口隔离原则(ISP)
1、定义
接口的调用者或者使用者不应该被强迫依赖它不需要的接口。
2、为什么要遵循该原则
接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
3、怎样遵循该原则
接口尽量小,但是要适度,接口设计得过大或过小都不好;
为依赖接口的类定制服务,只暴露给调用类需要的方法,不需要的方法则隐藏起来。
五、依赖反转原则(DIP)
1、定义
高层模块不应该依赖低层模块,二者都应该依赖其抽象;
抽象不应该依赖细节;
细节应该依赖抽象。
2、为什么要遵循该原则
可以减少类间的耦合性,提高系统的稳定,降低并行开发引起的风险,提高代码的可读性和可维护性。
3、怎样遵循该原则
依赖接口不要依赖实体类。
六、KISS原则
1、定义
Keep It Simple and Stupid,尽量保持简单。
2、为什么要遵循该原则
保持代码可读和可维护的重要手段。
3、怎样遵循该原则
不要使用同事可能不懂的技术来实现代码;
不要重复造轮子,要善于使用已经有的工具类库;
不要过度优化,牺牲代码的可读性。
七、YAGNI原则
1、定义
You Ain’t Gonna Need It(你不需要它),不要做过度设计。
2、为什么要遵循该原则
可以通过根本就不实现它来达到精简的目标;
软件项目中,大概80%的时间在做20%的功能。
3、怎样遵循该原则
不要去设计当前用不到的功能;
不要去编写当前用不到的代码;
代码可以根据业务留着扩展点,但是无需把还没用到的扩展也实现出来。
八、DRY原则
1、定义
Don’t Repeat Yourself(不用重复你自己),不要写重复的代码。
2、为什么要遵循该原则
提高代码的复用性。
3、怎样遵循该原则
三次原则(Rule of three),即同样的代码将要出现第三次前,考虑抽象它。
4、如何判断是否违反该原则
实现逻辑重复,但功能语义不重复的代码,并不违反 DRY 原则。
实现逻辑不重复,但功能语义重复的代码,也算是违反 DRY 原则。
除此之外,代码执行重复也算是违反 DRY 原则。
九、迪米特法则(LOD)
1、定义
最小知识原则;
每个模块只应该了解那些与它关系密切的模块的有限知识或者说,每个模块只和自己的朋友“说话” ,不和陌生人“说话”。
2、为什么要遵循该原则
降低了类与类之间的耦合度,保证了模块的相对独立;
提高了类的可维护性和可扩展性。
3、怎样遵循该原则
不该有直接依赖关系的类之间,不要有依赖;
有依赖关系的类之间,尽量只依赖必要的接口。
十、设计原则总结
设计原则 | 区别 | 目的 |
单一职责原则 | 一个类只负责一个职责 | 提高代码的复用性、可读性、可维护性 |
开闭原则 | 对扩展开放,对修改关闭 | 提高代码的可扩展性 |
里式替换原则 | 子类重写方法功能发生改变,不应该影响父类 | 防止继承泛滥 |
接口隔离原则 | 接口要精简单一 | 提高代码的灵活性和可维护性 |
依赖反转原则 | 高层不应该依赖低层,要依赖抽象 | 提高代码的可读性和可维护性 |
迪米特法则 | 最小知道原则 | 提高代码的可维护性和可扩展性 |
KISS原则 | 尽量保持简单 | 提高代码的可读性和可维护性 |
YAGNI原则 | 不要做过度设计 | 提高代码的可维护性 |
DRY原则 | 不要写重复的代码 | 提高代码的复用性 |
结论:遵循设计原则能极大的提高代码的高内聚和低耦合,让我们写出来的代码质量更高,在这个内卷的时代,可以让软件工程师们拥有高人一等的能力,是一项必备的知识技能。
- 上一篇: Java设计模式之七大原则 java设计原则详解
- 下一篇: Java设计模式(三):设计模式六大原则
猜你喜欢
- 2024-11-02 Java,设计模式,七大原则,里氏替换原则(LSP),案例
- 2024-11-02 软件设计七大原则,程序员标配(一)
- 2024-11-02 设计模式七大原则 设计模式七大原则包括
- 2024-11-02 Java设计模式的精神领袖:开闭原则
- 2024-11-02 设计模式第2招第3式之命令模式 命令模式定义
- 2024-11-02 Java代码优化六大原则 java代码优化六大原则有哪些
- 2024-11-02 一天一个设计模式——软件架构设计七大原则
- 2024-11-02 专门画了9张图,搞懂设计模式6大原则,这次应该可以了吧
- 2024-11-02 程序员应知道这十大面向对象设计原则
- 2024-11-02 3张图说清楚:java设计模式原则:开闭、接口隔离、迪米特法则
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)