C#设计原则:3.里氏替换原则 u3d学习总结笔记本

 

氏替换原则 (LSP):

Liskov Substitution Principle,简称:LSP。

所有使用基类的地方,都可以使用其子类来代替,而且行为不会有任何变化,子类型必须能够替换掉它们的父类型

 

问题由来

虽然有依赖倒置原则,但是写通用工具时,一般是很难做到面面俱到,使得成型工具能通用任何情况。

那么在开发时,一旦项目写到一半,增加的需求突然超出了 已有工具的能力范围 ,或者 和已有的工具功能有些不同。

这个时候如果去修改已有工具类,那么将会违反开闭原则,甚至会改成一团乱麻,导致工具需要重写,可能要浪费不少时间。

 

解决方案

新建一个工具类来继承原有工具类,通过重写来覆盖修改原有功能,也能在其基础上新增功能。

并且这个新工具能被高层代码正常调用。

那么临时写的 新工具 将可以完全顶替 原工具 的工作,重写工具的计划也可以暂时搁置。

 

代码例子:

在Start里声明出A类

通过类注入来顶替高层类A的内部调用的B1

以此达到不修改A类来临时替换工具的目的。

并且可以方便通过A来拿到B2的新增功能。

 

结果:

 

public class ceshi003 : MonoBehaviour
{
    void Start()
    {
        A a = new A();//实例化高层类

        a.b1 = new B1();//注入底层工具
        a.draw();

        a.b1 = new B2();//注入新工具
        a.draw();
        
        ((B2)a.b1).printf();//可调用的新功能
    }
}

 

高层类

public class A //定义高层类A
{
    public B1 b1;
    public void draw()
    {
        Debug.Log("高层A调用:");
        b1.draw1();b1.draw2(); //调用底层B1
    }

}

 

原底层功能

public class B1
{
    public virtual void draw1()
    {
        Debug.Log("b1方法1执行!!!");
    }

    public virtual void draw2()
    {
        Debug.Log("b1方法2执行!!!");
    }
}

 

顶替的新功能

public class B2 : B1 //继承B1工具,修改一个功能
{
    public override void draw1() //重写其中一个功能
    {
        Debug.Log("b2方法1执行!!!");
    }

    public void printf() //新增一个功能
    {
        Debug.Log("b2方法 printf 执行!!!");
    }
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值