面向對象的六大原則(三)-- 里氏替換原則

三:里氏替換原則(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的緩存系統具有了無線的可能性,也就是保證了可擴展性。


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