坚实原则: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 {

    @Override
    public 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值