面向对象设计原则之三(里氏替换原则)-构建扩展性更好的系统

来源:互联网 发布:windows安装ruby环境 编辑:程序博客网 时间:2024/05/21 11:08

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

        例子代码如下:

package com.example.yangshin99.myapplication;import android.view.View;/** * Created by yangshin99 on 16/2/16. * 窗口类 */public class Window {    public void show(View child){        child.draw();    }}//建立视图抽象,测量视图的宽高为公用代码,绘制实现交给具体的子类public abstract class View{    public abstract void draw();    public void measure(int width,int height){        //测量视图大小    }    }    //按钮类的具体实现    public class Button extends View{        @Override        public void draw() {            //绘制按钮        }    }    //TextView的具体实现    public class TextView extends View{        @Override        public void draw() {            //绘制文本                    }    }

        上述示例中,Window依赖于View,而View定义了视图抽象,measure是各个子类共享的方法,子类通过覆写View的draw方法实现各具特色的功能,在这里,这个功能就是绘制自身的内容。任何继承自View类的子类都可以设置给show方法,就是所说的里氏替换。通过里氏替换,就可以自定义各种各样、千变万化的View,然后传递给window。

里氏替换原则的核心原理是抽象,抽象又依赖于继承。在代码实现中,里氏替换又有多态。里氏原则指导我们构建更好的软件系统。里氏替换原则就是为ImageLoader使用不同缓存策略这类问题提供指导原则,也就是建立抽象,通过抽象建立规范,具体的实现在运行时替换掉抽象,保证系统的扩展性、灵活性。开放-关闭原则和里氏替换原则往往生死相依,不离不弃。通过里氏替换原则来达到对扩展开放,对修改关闭的效果。这2个原则都强调一个重要特性-抽象。因此,在开发过程中,运用抽象时走向代码优化的重要一步。

0 0
原创粉丝点击