概述
一、里氏替换原则
若对每个类型 T1 的对象 o1,都存在一个类型 T2 的对象 o2,使得在所有针对 T2 编写的程序 P 中,用 o1 替换 o2 后,程序 P 的行为功能不变,则 T1 是 T2 的子类型。
简单的阐述里氏替换原则 : 一个父类A,一个子类B继承自A类,在程序代码之中可以用子类B的对象引用去替换掉原本代码中的A类对象引用,并且程序不会出问题
要满足这个条件就需要子类A的约束要比父类B更宽松,比如父类B中一个函数访问修饰符为protected ,在子类A中就需要使用public来定义,不能使用private,因为 private 的访问控制比 protected 更严格
举一个例子 :
首先我们判断一个继承是否合理会使用 “IS A” 进行判断,如上图 :白马 IS A 马 ,小马驹 IS A 马 ,看起来没有问题。
让我们进一步探讨,在这个场景中,人能够骑马,我们使用白马来替代马没有问题,但是我们使用小马驹来替代马时就不行了,因为小马驹没长大还不能骑,这样使用小马驹继承马就违反了里氏替换原则。
一个类如果不是为了被继承而设计,那么最好就不要继承它。粗暴一点地说,如果不是抽象类或者接口,最好不要继承它。
二、单一职责原则
一个类,应该只有一个引起它变化的原因。也就是,一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护。其实上单一职责原则和接口隔离原则有一定的关系,接口隔离以后,职责就单一了,实现这个接口的类的职责自然也就单一了。但是接口隔离关注的是抽象层,单一职责关注的是两者兼而有之,偏重于实现。
举一个例子 :
在上图中的Rectangle类中有draw(画图)和area(计算面积)两个方法,当我们需要进行正方型的面积计算的时候,需要依赖这个类,但是在这个类中又依赖了一个GUI包,让我们在不需要GUI功能的情况下把这个GUI包一起打包了,增加负担,这个类的设计就违反了单一职责原则。
我们将原来的Rectangle类进行拆分成两个类,一个类只有一个职责,这样的设计就满足了单一职责原则
最后
以上就是正直冬瓜为你收集整理的软件设计的里氏替换原则与单一职责原则(读书笔记)的全部内容,希望文章能够帮你解决软件设计的里氏替换原则与单一职责原则(读书笔记)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复