在java開發中經常會聽到這樣的話,“針對接口編程,不針對實現編程”,可能你已經知道了,但是在這里我還是啰嗦一下,使用接口編程,可以隔離掉以后系統可能發生的一大推改變。為什么呢?如果代碼是針對接口寫的,那么通過多態,它可以與任何新類實現該接口。但是,當代碼使用大量的具體類時,等于自找麻煩,因為一旦加入新的具體類就要修改源代碼。
1.當看到“new”,就會想到“具體”
是的,當使用“new”時,你的確是在實例化一個具體類,所以用的確實是實現,而不是接口。這樣代碼綁著具體類會導致代碼更脆弱,更缺乏彈性。
interface Duck{
...
}
class MallardDuck implements Duck{
...
}
Duck duck (使用duck讓代碼具有彈性) = new MallardDuck();
當有一群相關的具體類時,通常會寫出這樣的代碼
Duck duck = null;
if(type){
duck = new MallardDuck();
}else if(type1){
duck = new DecoyDuck();
}else if(type2){
duck = new RubberDuck();
}
這里有一些要實例化的具體類,究竟要實例化那個類,要在運行時有一些條件決定。
當看到這樣的代碼,一旦出現變化或者擴展就必須修改這段代碼,修改次數越多,出現錯誤的幾率越大。同時這段代碼的重用性不高。所以,該怎么辦,當遇到這種情況,就應該回到oom設計原則中尋找線索。有一個原則是“找出變化的方面,把它們從不變的部分分離出來”
新聞熱點
疑難解答