以前,我们深入研究了坚实的原则,包括单一责任和开放/封闭原则。
Liskov替代原则(LSP)是子类型关系的一种特殊定义,称为(强)行为子类型,

假设对象S是对象T的子类型,则可以用类型S的对象替换类型T的对象,而无需更改T的任何理想属性。

假设我们有Employee类。

package com.gkatzioura.solid.liskov;public class Employee {public void work() {System.out.println("Employee is working");}}

我们还有另一个继承Employee类的类。

package com.gkatzioura.solid.liskov;public class EmployeeOnVacation extends Employee {@Overridepublic void work() {throw new IllegalArgumentException("Employees on vacation should not work");}
}

假设我们有一个项目。

package com.gkatzioura.solid.liskov;import java.util.List;public class Project {public void start(List<Employee> employees) {for(Employee employee:employees) {employee.work();}}
}

我们指派员工开始研究

List<Employee> employees = new ArrayList<>();employees.add(new EmployeeOnVacation());employees.add(new Employee());Project project = new Project();project.start(employees);

由于雇员正在休假,结果将是一个例外,因此该项目将无法完成。
为了避免违反该原则,我们将使用不同的方法并建立两个不同的员工界面。
WorkingEmployee接口。

package com.gkatzioura.solid.liskov;public interface WorkingEmployee {public void work();
}

和非工作人员界面。

package com.gkatzioura.solid.liskov;public interface NonWorkingEmployee {void relax();
}

因此,该项目将仅使用作为WorkingEmployee接口的实现的员工。

List<WorkingEmployee> employees = new ArrayList<>();employees.add(new WorkingEmployeeImpl());Project project = new Project();project.start(employees);

您可以在github上找到源代码。 下一个原则是接口隔离原则。

另外,我还编写了备忘单,其中包含一些扎实的原则。
在链接中注册以接收它。

翻译自: https://www.javacodegeeks.com/2018/02/solid-principles-liskov-substitution-principle.html

坚实原则:Liskov替代原则相关推荐

  1. liskov替换原则_坚实原则:Liskov替代原则

    liskov替换原则 以前,我们深入研究了坚实的原则,包括单一责任和开放/封闭原则. Liskov替代原则(LSP)是子类型关系的一种特殊定义,称为(强)行为子类型, 假设对象S是对象T的子类型,则可 ...

  2. liskov替换原则_构造函数与打破Liskov替代原则

    liskov替换原则 At the risk of being targeted by the PHP hate-mongers, I must confess that I'm pretty com ...

  3. 里斯科夫替换_里斯科夫替代原则

    里斯科夫替换 Welcome to the (overridden) Matrix. Hush- don't tell anybody! In a deleted scene from the Mat ...

  4. 设计模式—六大原则—里氏代换原则

    里氏代换原则(Liskow-Substitution-Principle) 定义:子类对象能够替换父类对象,而程序逻辑不变. ​ 里氏替换原则是确保继承正确使用的方法(继承使用的要求条件). ​ Li ...

  5. 编码最佳实践——Liskov替换原则

    Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则.按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类 ...

  6. 软件设计原则(三)里氏替换原则 -Liskov Substitution Principle

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一. 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现. LSP是继承复用的基石,只 ...

  7. 设计模式六大原则之--里氏替代原则(LSP)

    1. 里氏替代原则,(Liskov Substitution Principle, LSP ) 定义:Functions that use pointers or referrnces to base ...

  8. 六大原则之“里氏替代原则(LSP)“笔记

    1. 里氏替代原则,(Liskov Substitution Principle, LSP ) 定义:Functions that use pointers or referrnces to base ...

  9. Liskov替换原则(LSP)

    Liskov替换原则(The Liskov Substitution Principle) 子类型(subtype)必须能够替换掉它们的基类型(base type). 一个违反LSP的简单例子 pub ...

最新文章

  1. GSS-API GSSAPI 介绍 通用的安全机制
  2. git-commit编辑器nano改vim
  3. java oracle rs.next_使用jsp连接oracle时,rs.next()值始终为false,表中存在数据
  4. Java的深浅拷贝你了解吗?
  5. [html] 精确获取页面元素位置的方式有哪些?
  6. char怎么比较_为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?...
  7. Milking Grid poj2185
  8. Foxconn Core Concept
  9. unity3D---鼠标、键盘输入
  10. 拓端tecdat|R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
  11. SQL语句练习(全)
  12. 如何自学计算机access,我是怎样自学access的
  13. 低代码搭建医疗企业数字化CRM案例分析
  14. SIGBUS:BUS_ADRERR for stack access violation in memcpy
  15. Python中常用的四个小技巧总结
  16. 域名CNAME记录不能同时适配根域名和www的解决方法
  17. 女生戴蓝牙耳机什么颜色好看?适合女生的高颜值蓝牙耳机
  18. go中mgo操作数据库的一些示例
  19. 通过javascript免费下载百度文库的文档的小技巧
  20. MySQL的隐式类型转换

热门文章

  1. Top Secret Task(dp+滚动数组)
  2. JavaFX图表(四)之面积图
  3. JAVA面试常考系列十
  4. springboot+layui从控制器请求至页面时js失效的解决方法
  5. java知识点总结(二)
  6. java使用循环案例——CSDN博客
  7. mysql fpmmm_zabbix配fpmmm(mpm)数据传送不了问题解决
  8. 减一天 日期函数_一文掌握excel中的日期函数
  9. 如何创建虚拟硬盘 + os 读取硬盘参数代码
  10. What are definitions of ​Model, Inference and Algorithm and its associations ?