网站上打广告,济南网站seo哪家公司好,电脑网页制作模板,长沙网站推广工具tip: 作为程序员一定学习编程之道#xff0c;一定要对代码的编写有追求#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅#xff0c;即使这会费时费力。
相关规则#xff1a;
推荐#xff1a;体系化学习Java#xff08;Java面试专题#xff09;
1.6大设…tip: 作为程序员一定学习编程之道一定要对代码的编写有追求不能实现就完事了。我们应该让自己写的代码更加优雅即使这会费时费力。
相关规则
推荐体系化学习JavaJava面试专题
1.6大设计规则-迪米特法则 2.6大设计原则-接口隔离原则 3.6大设计规则-开闭原则 4.6大设计规则-单一职责原则 5.6大设计规则-依赖倒置原则 文章目录 里氏替换原则 里氏替换原则
里氏替换原则 Liskov Substiution Principle 简称 LSP。怎么理解这个原则呢《设计模式之禅》第二章介绍它有两种定义
1、If for each object ol of type S there is an object o2 oftype T such that for all programs P defined in terms of T, the behavior of P is unchangedwhen o1 is substituted for o2 then S is a subtype of T. 如果对每一个类型为S的对象ol都有类型为T的对象o2使得以T定义的所有程序P在所有的对象o1都代换成o2时程序P的行为没有发生变化那么类型S是类型T的子类型。
这句话有点晦涩简单来说就是 T 是父类S 是子类在一段代码中将 T 替换成 S 代码的逻辑并没发生任何变化。
2、Functions that use pointers or references to base classes must be able to useobjects of derived classes without knowing it. 所有引用基类的地方必须透明的使用其子类的对象。 这句话的意思呢跟上面的差不多就父类出现的地方换成子类代码不会异常但是如果反过来子类出现的地方要是换成父类那么就有可能出错了。
参考下面的例子 我们可以将保时捷换成法拉利并没有改变 User 类的代码逻辑依然是先 先点火在驾驶这就是里氏替换原则的第一个定义。
package com.pany.camp.design.principle.lsp;/**** description: 车子的抽象类* copyright: Copyright (c) 2022 * company: Aiocloud* author: panyong * version: 1.0.0 * createTime: 2023-05-31 13:26*/
public abstract class Car {/*** 启动** since 1.0.0* param* return: void* author: panyong* version: 1.0.0* createTime: 2023-05-31 13:28*/abstract void firing();/*** 车子的牌子** since 1.0.0* param* return: String* author: pany* version: 1.0.0* createTime: 2023-05-31 13:36*/abstract String getName();
}
package com.pany.camp.design.principle.lsp;
/**** description: 保时捷* copyright: Copyright (c) 2022* company: Aiocloud* author: pany* version: 1.0.0* createTime: 2023-05-31 13:30*/
public class Porsche extends Car {Overridevoid firing() {System.out.println(drive porsche);}OverrideString getName() {return porsche;}
}
package com.pany.camp.design.principle.lsp;/**** description: 法拉利* copyright: Copyright (c) 2022* company: Aiocloud* author: pany* version: 1.0.0* createTime: 2023-05-31 13:40*/
public class Ferrari extends Car {Overridevoid firing() {System.out.println(drive ferrari);}OverrideString getName() {return ferrari;}
}
package com.pany.camp.design.principle.lsp;public class User {public void drive(Car car) {car.firing();System.out.println(drive car.getName());}public static void main(String[] args) {User user new User();// 我可以换成其他的方式并没有改变代码的逻辑user.drive(new Porsche());user.drive(new Ferrari());}
}