里氏代换原则

里氏代换原则的定义是——子类型必须能够替换掉他们的父类型。

在学习类的继承时有一个概念,如果子类继承自父类,那么子类就应该能以父类的身份出现。简单说,如果一个软件实体使用的是一个父类的话,那么就肯定适用其子类,并且该软件实体察觉不到父类对象和子类对象的区别。

举个例子,有个很厉害的老木匠,周边的邻居都找他做家具,老木匠还有个大徒弟,不但学全了老木匠的本事还青出于蓝而胜于蓝。后来老木匠干不动了,所以每次有人找上门来都是老木匠接活儿,大徒弟去做家具,而对做家具的人来说,他们并不关心具体谁做的,只要能拿到家具就好。

/**
  * Author:小青
  * Time:2017-8-27 
  * Function:老木匠
  *
  */
public class OldCarpenter{
	public void MakeFurniture(){
		System.out.println("做家具");
	}
}
/**
  * Author:小青
  * Time:2017-8-27 
  * Function:大徒弟
  *
  */
public class YoungFurniture extends oldCarpenter{
	@Override
	public void MakeFurniture(){
		super.MakeFurniture();
		System.out.println("对家具进行装饰");
	}
}

public class Client{
	public sttaic void main(String[] args){
		OldCarpenter carpenter = new OldCarpenter();
		System.out.println("原来老木匠做椅子");
		carpenter.MakeFurniture();
		System.out.println("后来老木匠接活儿让徒弟来做");
		carpenter = new YoungFurniture();

	}
}
在这个过程中,邻居们并没有发现是谁做的家具,徒弟替代了师傅。

只有在满足了里氏替换原则之后,也就是子类可以代替父类出现,并且不影响程序的功能时,父类才能真正得到复用,并且子类可以在父类的基础上添加新的行为,面向对象思想中,父类和子类的继承关系是抽象化的具体实现。
里氏替换原则(Liskov Substitution Principle ,LSP)反映了父类和子类的关系。里氏代换原则的面向对象设计中最重要也是最基本的原则之一,是对实现类的抽象化实施步骤的规范。

以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
里氏代换原则是指程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的。在23种设计模式中,违反里氏代换原则的模式包括以下几种: 1. 模板方法模式:在模板方法中,由子类实现的抽象方法可能会改变模板方法的行为,违反了里氏代换原则。 2. 迭代器模式:在迭代器模式中,子类实现的迭代方法可能会引起迭代器的状态异常,违反了里氏代换原则。 3. 组合模式:在组合模式中,子类实现的添加、删除方法可能会引起整个组合对象的结构异常,违反了里氏代换原则。 4. 工厂方法模式:在工厂方法模式中,子类实现的产品可能会导致工厂方法的返回类型不一致,违反了里氏代换原则。 5. 抽象工厂模式:在抽象工厂模式中,子类实现的产品族可能会导致抽象工厂的返回类型不一致,违反了里氏代换原则。 6. 建造者模式:在建造者模式中,子类实现的部件可能会导致建造者的返回类型不一致,违反了里氏代换原则。 7. 策略模式:在策略模式中,子类实现的具体策略可能会改变策略模式的行为,违反了里氏代换原则。 8. 代理模式:在代理模式中,代理类可能会对被代理类的方法进行过滤或拦截,从而改变系统的行为,违反了里氏代换原则。 这些设计模式虽然违反了里氏代换原则,但是它们都为代码提供了更好的可扩展性和可维护性,具体情况需要根据实际情况进行权衡和选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值