美文网首页
1.3构建扩展性更好的系统------里氏替换原则

1.3构建扩展性更好的系统------里氏替换原则

作者: AndYMJ | 来源:发表于2020-03-31 00:26 被阅读0次

里氏替换原则第定义是:所有引用基类的地方必须能透明地使用其子类的对象。

我们知道,面相对象的语言的三大特点是继承、封装、多态,里氏替换原则就是依赖于继承、多态这两大特性。里氏替换原则简单来说就是,所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不回产生任何错误和异常,使用者可能根本就不需要知道是父类还是子类。但是,单过来就不行了,有子类出现的地方,父类未必就能适应。说了那么多,其实最终总结就两个字:抽象。

小明为了深入地了解Android中的Window和View的关系,特意写了一个简单示例,为了我们看看具体的代买实现。

上述示例中,Window依赖于View,而View定义了一个视图抽象,measure是各个子类共享的方法,子类通过覆盖View的draw方法实现具有各有各自特色的功能,在这里,这个功能就是绘制自身的内容。任何继承自View的子类都可以传递给show函数,就是所说的里氏替换。通过里氏替换,就可以自定义各式各样、千变万化的View,然后传递给Window,Window负责组织View,并且将View显示到屏幕上。

里氏替换原则的核心原理是抽象,抽象又依赖继承这个特性,在oop当中,继承的优缺点都相当明显。优点有以下几点:

(1)代码重用,减少创建类的成本,每个子类都拥有父类的方法和属性;

(2)子类与父类基本相似,但又与父类有所区别;

(3)提高代码的可扩展性。

继承的缺点

(1)继承是侵入性的,只要继承就必须拥有父类的所有属性和方法

(2)可能造成子类代码泟与、灵活性降低,因为子类必须拥有父类的属性和方法。

失误总是具有两面性,如何权衡利与弊都是需要根据具体情况来做出选择并加以处理。里氏提示原则指导我们构建扩展性更好的软件系统,我们还是接着上面的ImageLoader来说明。

图1-2所示也很好地反应了里氏替换原则,即MemoryCache、DiskCache、DoubleCache都可以替换ImageCache的工作,并且能够保证行为的正确性。ImageCache建立获取缓存图片、保存缓存图片的接口规范,MemoryCache等根据接口规范了相应的功能,用户只需要在使用时指定具体的缓存对象就可以动态地替换ImageLoader中的缓存策略。这就使得ImageLoader的缓存系统有了无限的可能性,也就是保证了扩展性。

想象一种情况,当ImageLoader中的setImageCache中的cache对象不能够被子类所替换,那么用户如何设置不同的缓存对象,以及用户如何自定义自己的缓存实现,通过里氏扩展

相关文章

  • 1.3构建扩展性更好的系统------里氏替换原则

    里氏替换原则第定义是:所有引用基类的地方必须能透明地使用其子类的对象。 我们知道,面相对象的语言的三大特点是继承、...

  • 面向对象的六大原则

    一、优化代码第一步——单一职责原则 二、让程序更稳定、更灵活——开闭原则 三、构建扩展性更好的系统——里氏替换原则...

  • 构建扩展性更好的系统——里氏替换原则

    里氏替换原则(SLP) 就不说高大上的学术定义了,通俗讲,就是只要父类能出现的地方子类就可以出现,而且替换为子类也...

  • Android设计模式读书笔记

    设计模式原则 单一职责 开闭原则 里氏替换 接口隔离 依赖倒置(也称依赖反转) 迪米特原则(更好的扩展性) 创建型...

  • 里氏替换原则

    里氏替换原则 “里氏替换原则(Liskov Substitution Principle,LSP)” 定义 一:(...

  • 里氏替换原则

    个人博客原文:里氏替换原则 设计模式六大原则之二:里氏替换原则。 简介 姓名 :里氏替换原则 英文名 :Lisko...

  • 设计模式之里氏替换原则

    设计模式之里氏替换原则 里氏替换原则(LSP: Liskov Substitution Principle) 定义...

  • 9-1 iOS六大设计原则

    1.六大设计原则 1.1单一职责原则 1.2开闭原则 1.3接口隔离原则 1.4依赖倒置原则 1.5里氏替换原则 ...

  • 面向对象的原则里氏替换原则

    里氏替换原则 里氏替换原则的英文全称是Liskov Substitution Principle,缩写是LSP。 ...

  • 里氏替换原则

    里氏替换原则 里氏替换原则(Liskov Substitution Principle, LSP) 父类能出现的地...

网友评论

      本文标题:1.3构建扩展性更好的系统------里氏替换原则

      本文链接:https://www.haomeiwen.com/subject/lqeeuhtx.html