我是靠谱客的博主 热心小伙,最近开发中收集的这篇文章主要介绍设计模式笔记—里氏替换原则,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

里氏替换原则

        概念:英文全称是Liskov Substitution Principle,缩写是LSP.第一种定义是:如果对每一个类型为S的对象s1,都有类型T定义的t2,使得以T定义的所有程序P在所有的对象s1都代换成t2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。第二种定义:所有引用基类的地方必须能透明地使用其子类的对象。
         面向对象语言的三大特点是继承,封装,多态,里氏替换原则就是依赖于继承,多态这两大特性。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。体现了抽象的特点。举例如下:
public abstract class AbstractGun {
	public abstract void shoot();
}
public class Rifle extends AbstractGun{
	@Override
	public void shoot() {
      System.out.println("步枪射击...");		
	}
}
public class Handgun extends AbstractGun{
	@Override
	public void shoot() {
		System.out.println("手枪射击...");
	}
}
public class Solider {
	private AbstractGun gun;
	public void setGun(AbstractGun g){
		this.gun=g;
	}
	public void killEnemy(){
		System.out.println("士兵开始杀敌人....");
		gun.shoot();
	}
}
public class Client {
public static void main(String[] args) {
	Solider solider = new Solider();
	//这里面既可以传Rifle,也可以传Handgun,都是AbstractGun的子类,体现里氏替换原则
	solider.setGun(new Rifle());
	solider.killEnemy();
}
}
士兵开始杀敌人....
步枪射击...

里氏替换原则的核心原理是 抽象,抽象又依赖于继承这个特性,在OOP当中,继承的优缺点都相当明显。优点有以下几点:
        1)代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;
        2)子类和父类基本相似,但又与父类有所区别;
        3)提高代码的可扩展性
        继承的缺点:
        1)继承是侵入性的,只要继承就必须拥有父类的所有属性和方法;
2)可能造成子类代码冗余,灵活性降低,因为子类必须拥有父类的属性和方法。








最后

以上就是热心小伙为你收集整理的设计模式笔记—里氏替换原则的全部内容,希望文章能够帮你解决设计模式笔记—里氏替换原则所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部