2012-11-25 43 views

回答

7

依賴倒置原理;其中的五個Object Oriented Design Principles。檢查這個問題的答案; "What is the Dependency Inversion Principle and why is it important?" - 這裏有一些非常好的信息。

在傳統的應用程序體系結構中,較低級別的組件被設計爲由較高級別組件使用,這使得可以構建日益複雜的系統。在這個組合中,更高級別的組件直接依賴於較低級別的組件來完成某些任務。對較低級別組件的依賴限制了較高級別組件的重用機會。

在「簡單」條款,這意味着,當你依靠的對象的具體情況 - 你正在構建你的代碼的依賴關係(雖然沒有這種意圖),這則限制了能力重新使用它。

記住一個具體類型是一種類型的類可以實例化和摘要類型是一類不能;即界面。 (見Taxonomy of Classes

如果你編碼到一個特定的具體類,那麼你將永遠有該類的要求。但是,如果你編碼到一個接口(一個抽象),那麼就可以使你的代碼適應任何數量的類;只要他們實現了這個通用接口。

所以在Java中,這意味着在可能的情況下應該編碼到接口 - 並避免讓代碼依賴於特定項目。這通常與傳遞Interface類型作爲參數和返回類型一樣簡單;而不是具體的課程。

更少的依賴性=更多的重用代碼的能力。 更多的依賴性=更多的需求能夠重用代碼。

當你學習設計模式時,這將是一個重新發生的主題!

Dependency Inversion Principle維基百科的文章。

+0

謝謝我的朋友。 – Talha

2

因爲工廠是虛擬的構造函數。他們給你在運行時返回不同類型的能力。工廠依賴於多態性。

如果您返回具體類型,則不能做任何此類事情。

public interface IFoo { 
    void execute(); 
} 

public class Bar implements IFoo { 
    public void execute() { System.out.println("Bar does one thing"); } 
} 

public class Baz implements IFoo { 
    public void execute() { System.out.println("Baz does another"); } 
} 

public class FooFactory { 
    private static final FooFactory instance = new FooFactory(); 

    private FooFactory() {} 

    public static final FooFactory getInstance() { return instance; } 

    public IFoo create(Class clazz) { 
     return clazz.newInstance(); 
    } 
} 

這應該是顯而易見的,如果從返回Bar的創建方法,一個Baz是不可能的,反之亦然。界面是關鍵。

+0

謝謝你,我的朋友。 – Talha

1

根據抽象可能會幫助您獲得鬆耦合之間的類。這就是建議的原因。考慮一個例子Animal類。如果您可以通過定義來保留許多抽象,那麼當您定義更具體的類時,例如DogBird,您將具有更大的彈性。如果您將Dog的具體功能放在Animal的內部,那麼當您嘗試編寫Bird延伸Animal時,將會產生衝突。所以總是將事物抽象到類層次結構的上層。

+0

謝謝我的朋友。 – Talha

相關問題