坚实原则:Liskov替代原则
以前,我们深入研究了坚实的原则,包括单一责任和开放/封闭原则。
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替代原则相关推荐
- liskov替换原则_坚实原则:Liskov替代原则
liskov替换原则 以前,我们深入研究了坚实的原则,包括单一责任和开放/封闭原则. Liskov替代原则(LSP)是子类型关系的一种特殊定义,称为(强)行为子类型, 假设对象S是对象T的子类型,则可 ...
- liskov替换原则_构造函数与打破Liskov替代原则
liskov替换原则 At the risk of being targeted by the PHP hate-mongers, I must confess that I'm pretty com ...
- 里斯科夫替换_里斯科夫替代原则
里斯科夫替换 Welcome to the (overridden) Matrix. Hush- don't tell anybody! In a deleted scene from the Mat ...
- 设计模式—六大原则—里氏代换原则
里氏代换原则(Liskow-Substitution-Principle) 定义:子类对象能够替换父类对象,而程序逻辑不变. 里氏替换原则是确保继承正确使用的方法(继承使用的要求条件). Li ...
- 编码最佳实践——Liskov替换原则
Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则.按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类 ...
- 软件设计原则(三)里氏替换原则 -Liskov Substitution Principle
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一. 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现. LSP是继承复用的基石,只 ...
- 设计模式六大原则之--里氏替代原则(LSP)
1. 里氏替代原则,(Liskov Substitution Principle, LSP ) 定义:Functions that use pointers or referrnces to base ...
- 六大原则之“里氏替代原则(LSP)“笔记
1. 里氏替代原则,(Liskov Substitution Principle, LSP ) 定义:Functions that use pointers or referrnces to base ...
- Liskov替换原则(LSP)
Liskov替换原则(The Liskov Substitution Principle) 子类型(subtype)必须能够替换掉它们的基类型(base type). 一个违反LSP的简单例子 pub ...
最新文章
- GSS-API GSSAPI 介绍 通用的安全机制
- git-commit编辑器nano改vim
- java oracle rs.next_使用jsp连接oracle时,rs.next()值始终为false,表中存在数据
- Java的深浅拷贝你了解吗?
- [html] 精确获取页面元素位置的方式有哪些?
- char怎么比较_为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?...
- Milking Grid poj2185
- Foxconn Core Concept
- unity3D---鼠标、键盘输入
- 拓端tecdat|R语言高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
- SQL语句练习(全)
- 如何自学计算机access,我是怎样自学access的
- 低代码搭建医疗企业数字化CRM案例分析
- SIGBUS:BUS_ADRERR for stack access violation in memcpy
- Python中常用的四个小技巧总结
- 域名CNAME记录不能同时适配根域名和www的解决方法
- 女生戴蓝牙耳机什么颜色好看?适合女生的高颜值蓝牙耳机
- go中mgo操作数据库的一些示例
- 通过javascript免费下载百度文库的文档的小技巧
- MySQL的隐式类型转换
热门文章
- Top Secret Task(dp+滚动数组)
- JavaFX图表(四)之面积图
- JAVA面试常考系列十
- springboot+layui从控制器请求至页面时js失效的解决方法
- java知识点总结(二)
- java使用循环案例——CSDN博客
- mysql fpmmm_zabbix配fpmmm(mpm)数据传送不了问题解决
- 减一天 日期函数_一文掌握excel中的日期函数
- 如何创建虚拟硬盘 + os 读取硬盘参数代码
- What are definitions of ​Model, Inference and Algorithm and its associations ?