面向对象的六大原则(三)-- 里氏替换原则

时间:2022-03-31 17:23:24

三:里氏替换原则(Liskov Substitution Principle)

定义:所有引用基类的地方都必须能透明地使用其子类的对象
举个例子:Android中的Windows与View的关系 面向对象的六大原则(三)-- 里氏替换原则
代码如下:
//窗口类
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){
//测量视图大小,具体代码省略
}

}


//View子类,Button
public class Button extends View{

public void draw(){
//绘制按钮。。。
}

}

//View子类,TextView
public class TextView{

public void draw(){
//绘制文本。。。
}

}

Window依赖于View,View定义了视图抽象,measure是各个子类共享的类,具体的draw交给其子类去实现。任何继承自View类的子类都可以设置给show方法,这就是里氏替换原则。这样就可以产生千变万化的View,而且可以统一传递给Window来进行管理并展示在屏幕上。

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