七大软件设计原则
2023-05-13 16:23:20 0 举报
AI智能生成
Java软件设计原则,可交流学习,有不足可提出意见,大家互相学习
作者其他创作
大纲/内容
接口隔离原则
定义
在使用接口的时候应该使用多个接口,而不是一个单一的接口
好处
1、符合高内聚低耦合的设计思想
2、使程序有更好的可读性,可扩展性,可维护性
定义接口注意
1、定义接口应该定义多个接口,而不是一个单一的臃肿的接口
2、尽量细化接口,每个接口中的方法尽量少
合成复用原则
定义
尽量使用对象的组合、聚合来达到程序功能的复用,而不是类之间的继承达到复用
优点
可以降低类之间的耦合
使程序更加灵活
举例
类型A中想要使用类型B的功能,可以将类型B引入到类型A中,而不是继承类型B
依赖倒置原则
概述
高层代码不应该依赖底层模块,而是高层代码和底层模块都依赖一个抽象
特点
面向接口编程而不是面向实现编程
举例
榨汁机类型可以榨苹果汁,西瓜汁等等,如果榨汁机中的方法参数都写死为西瓜类和苹果类,那么后续想榨橘子汁,需要再次i修改榨汁机的代码。所以榨汁机的方法参数可以定义一个水果接口,将来让西瓜类和苹果类实现水果接口,榨汁机依旧可以榨苹果汁和西瓜汁,如果需要榨橘子汁只需要让橘子实现水果接口即可,不需要再次修改榨汁机的代码,这就是面向接口编程
迪米特法则
定义
一个对象应该对其他对象保持最少的了解,当前业务中,如果不需要使用该引用,就尽量不要引入
好处
1、可以降低类之间的耦合
2、提升代码简洁度
举例
项目经理类型调用程序员类型,让程序员类型检查一下某段代码是否有问题,错误的做法是,项目经理类型先获取这段代码,然后将代码传递给程序员类型,正确的做法是,项目经理类型直接调用程序员类型,程序员类型自己获取有问题的代码,而不是要经过项目经理才拿到这段代码,否则一旦这段有问题的代码一旦修改了名字,那么项目经理和程序员都需要更改代码
里氏替换原则
定义
对于每一个类型为T1的对象o1,都有对应的T2类型的对象o2,使得程序P中使用的o1对象都能被o2对象替换,而程序P的的行为没有发生变化,那么T2类型就是T1的子类
扩展
一个实 体如果适用于一个父类的话,那么一定适用于其子类,子类对象能够替换父类,程序的逻辑不变
引申
子类可以扩展父类的功能,不能改变原有的功能
子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法
子类可以增加自己的特殊方法
子类重载父类的方法时,方法的入参应该比父类的更加宽松(参数类型应该范围更大)
子类重载父类的方法时,方法的返回值类型(后置参数)应该更加严格(范围更小)
好处
不改变原有程序结果的基础上,提高代码的健壮性
降低程序变更,引发风险
开闭原则(oop)
概述
一个软件实体,比如类、方法、模块等,应该支持对扩展开放,对i修改关闭
好处
允许扩展,不允许修改
提高代码的复用性,扩展性,可用性
举例
如果类中定义了一个书籍的价格属性,以及获取数据价格的方法,将来可以调用该方法获取书籍的价格,如果有一天书籍打八折,就修改该书籍价格的获取方法,将原价打八折返回,确实可以获取到打折后的价格,如果获取打折的价格后,又想获取书籍的原价,那么需要额外定义方法获取要再次运算,这样就降低了程序的复用性和扩展性,所以如果又打折活动,可以不修改原价的功能,可以在不修改代码的基础上提供一个获取打折价格的功能
单一职责原则
概述
对一个模块,一个类型,一个方法,尽量让他们的功能职责分开,而不是一个模块一个类型一个方法可以处理多个不同的事情
好处
提升程序的可维护性
如果一个类中,需要修改其中一个方法的逻辑导致整个类型调用失败,就会影响其他功能的调用
特点
强调的是业务功能的职责划分
举例
一个方法可以接收多个参数,然后对参数进行修改,如果参数A的修改逻辑很复杂需要改动,参数B不需要修改逻辑简单不需要改动,就可能导致修改参数B时的效率变低,或者导致出错,所以可以将参数A和参数B的修改逻辑分成两个功能实现,每个功能的职责不同,互不影响
0 条评论
下一页