今天犯了個錯:git
「接口變更,傷筋動骨,除非你肯定只有你一我的在用」。哪怕只是throw了一個新的Exception。哈哈,這是我犯的錯誤。github
類,即一個對象。設計模式
先抽象類,就是抽象出類的基礎部分,即抽象基類(抽象類)。官方定義讓人費解,可是記憶方法是也不錯的 — 包含抽象方法的類叫作抽象類。api
接口就是把抽象的深度更深,它就像用簡短的非邏輯的一些規則表示類之間的關係。能夠比做協議,好比通訊使用的UDP/TCP協議等。安全
小結:類與接口是Java語言的基本抽象單元。框架
a. 向上轉型爲多個基類型socket
如此,會給開發帶來至關大的靈活性。好比女神劉亦菲(Class),實現了 明星 和 女人 的接口。這樣在複雜的繼承結構的某類中使用它,之後在調用seeStar(Star star)或者seeWomen(Women women)方法時,只要傳入其實現類(劉亦菲)便可。這也就是常說的接口能夠多實現,達到了徹底解耦。模塊化
b. 可複用性函數
即根據接口定義,讓建立類有了遵循的」協議「(規則)。whatever~ 要作的僅僅創建一個接口,爲了保證生成對象的非耦合。如此而來,接口的使用讓代碼更具可複用性,通用性和靈活性。但並非那麼萬能。後面使用守則會講到。spa
前人大牛總結了一些設計模式,也就是接口衍生出的一些設計模式。設計模式就是語法糖的甜蜜吧。接口讓咱們嚐到了甜蜜。和我身邊的一杯starBucks的熱巧克力同樣。有點太甜。好比:
a.策略模式 — 方法中參數使用接口,傳入的參數對象(實現類)即包含了執行的代碼。如圖:
b. 適配器模式 — 接口適配器(Interface Adapter)類,能夠將不一樣源配到同一個目標。即暴露目標接口和實現源有共同的方法,適配器類怎麼適配呢?實現目標接口,並關聯了實現源對象,在實現方法中調用關聯實現源真正對象,而後在裏面進行各類適配操做。好比再關聯一個源什麼的。如圖:
這其實有點AOP的味道。好比Spring AOP框架對BeforeAdvice、AfterAdvice、ThrowsAdvice三種通知類型的支持其實是藉助適配器模式來實現的。
c. 工廠模式 — 工廠對象將生成接口某個實現的對象。從而代碼將實現和接口的實現分離,比較透明地將某個實現透明地替換成另外一個實現。可是這裏工廠調用方法是靜態的,也就是簡單工廠模式(靜態工廠模式)。動態工廠模式無非是使用了反射達到了動態調用。
第1、儘量使每個類或成員不被外界訪問
這裏的外界有個度,好比包級或者公有的。這樣子能夠更好地模塊化,模塊與模塊之間經過暴露的api調動。這樣若是有個模塊改動接口或者類。只要擔憂該模塊,而不會涉及其餘模塊。
第2、適當的使用類(抽象類)繼承,更多的使用複合
繼承,實現了代碼重用。內部中使用繼承很是安全,可是要記住何時使用繼承。即當子類真正是超類的子類型時,才適用繼承。不然儘量使用複合,即在一個類中引用另外一個類的實例。也就是說將另外一個類包裝了一下,這也就是裝飾模式所體現的。
第3、優先考慮使用接口,相比抽象類
首先Java只許單繼承,這致使抽象類定義收到極大的限制。兩者,接口沒法實現方法。可是Java 8提供了函數式接口。
可是接口在設計的時候注意,設計公有接口必須謹慎。接口若是被公開發行,則確定會被普遍實現,那樣改接口幾乎不可能,會是巨大的工程。(這和我犯的錯誤同樣。)
第4、佔時沒有第四了…
明白了 Java接口和抽象類什麼時候用?怎麼用?待續,有新的點補充吧
歡迎點擊個人博客及GitHub — 博客提供RSS訂閱哦!
———- http://www.bysocket.com/ ————- https://github.com/JeffLi1993 ———-
微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter :BYSocket