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

三:里氏替换原则(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的缓存系统具有了无线的可能性,也就是保证了可扩展性。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章