回答
依賴倒置原理;其中的五個Object Oriented Design Principles。檢查這個問題的答案; "What is the Dependency Inversion Principle and why is it important?" - 這裏有一些非常好的信息。
在傳統的應用程序體系結構中,較低級別的組件被設計爲由較高級別組件使用,這使得可以構建日益複雜的系統。在這個組合中,更高級別的組件直接依賴於較低級別的組件來完成某些任務。對較低級別組件的依賴限制了較高級別組件的重用機會。
在「簡單」條款,這意味着,當你依靠的對象的具體情況 - 你正在構建你的代碼的依賴關係(雖然沒有這種意圖),這則限制了能力重新使用它。
記住一個具體類型是一種類型的類可以實例化和摘要類型是一類不能;即界面。 (見Taxonomy of Classes)
如果你編碼到一個特定的具體類,那麼你將永遠有該類的要求。但是,如果你編碼到一個接口(一個抽象),那麼就可以使你的代碼適應任何數量的類;只要他們實現了這個通用接口。
所以在Java中,這意味着在可能的情況下應該編碼到接口 - 並避免讓代碼依賴於特定項目。這通常與傳遞Interface
類型作爲參數和返回類型一樣簡單;而不是具體的課程。
更少的依賴性=更多的重用代碼的能力。 更多的依賴性=更多的需求能夠重用代碼。
當你學習設計模式時,這將是一個重新發生的主題!
Dependency Inversion Principle維基百科的文章。
因爲工廠是虛擬的構造函數。他們給你在運行時返回不同類型的能力。工廠依賴於多態性。
如果您返回具體類型,則不能做任何此類事情。
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
是不可能的,反之亦然。界面是關鍵。
謝謝你,我的朋友。 – Talha
根據抽象可能會幫助您獲得鬆耦合之間的類。這就是建議的原因。考慮一個例子Animal
類。如果您可以通過定義來保留許多抽象,那麼當您定義更具體的類時,例如Dog
和Bird
,您將具有更大的彈性。如果您將Dog
的具體功能放在Animal
的內部,那麼當您嘗試編寫Bird
延伸Animal
時,將會產生衝突。所以總是將事物抽象到類層次結構的上層。
謝謝我的朋友。 – Talha
- 1. 抽象不應該依賴細節。細節應該取決於抽象?
- 2. 具體的課使用的抽象類?設計問題?
- 3. RenderAction需要表現不同,具體取決於包含頁面
- 4. jQuery .slideToggle將不會工作,具體取決於具體
- 5. 抽象類vs具體類?
- 6. 抽象類和具體類
- 7. 選擇從numpy的矩陣要素,具體取決於組值
- 8. RestKit對象映射失敗,具體取決於屬性名稱
- 9. NHibernate的:獲取具體類型引用的抽象實體的
- 10. JAVA - 創建抽象類的對象取決於參數
- 11. 用戶#編輯需要有所不同,具體取決於誰查看它
- 12. 我需要處理不同的事件,具體取決於視圖的移動
- 13. 如何解決不抽象,不覆蓋抽象方法onTabReselected
- 14. WPF MVVM ItemsControl具有多個ViewModels,具體取決於對象類型
- 15. 解決基於泛型的抽象類
- 16. 一個具體的類VS抽象類
- 17. 抽象類中的具體方法
- 18. 從具體的整數類型抽象
- 19. 抽象類擴展的具體類
- 20. 加載不同的畫廊滑塊,具體取決於項目
- 21. 具有不同屬性的實體取決於其類型?
- 22. Store.EntryID不同,具體取決於會話登錄方法
- 23. 查詢返回不同的結果,具體取決於用戶
- 24. 如何告訴Pex不要存根具體實現的抽象類
- 25. 解決依靠地獄與作曲家
- 26. 爲什麼我們在上課時需要抽象類?
- 27. 公共課與內部抽象成員
- 28. SQL查詢獲取最新價格,具體取決於日期
- 29. 智能卡具有不同的歷史字節,具體取決於接口
- 30. Spring MVC viewController具有不同的行爲,具體取決於模板引擎
謝謝我的朋友。 – Talha