學完設計模式也有1個多月了,設計模式這玩意做練習沒多大用,一定要看高手的原始碼才能體會。做練習,只是加深印象,不然以後忘了就不行了。
自從學完設計模式之後,就各種濫用介面。。容易變動的,穩定的。全部套上介面,最後的結果就是不斷的改介面,實在無語。。
濫用介面
總之,得出乙個結論就是 除非真的非常穩定的不會變動的模組直接用介面,否則不要著急用介面,先簡單實現了,能用了再說,內部有耦合不要緊。之後再重構,提煉介面也不遲。
如果感覺無法提煉介面,就不要設定介面。否則問題不斷。
組合與繼承
各種書一直闡述,組合大於繼承。。最近組合也把我弄的夠嗆。。組合有乙個好處,就是減少引數的數量。重構書上說過"過多的引數不是好味道",但減少引數的同時也帶來了許可權難以控制。就好像我只要乙個香蕉,而你卻給我乙個森林和乙個手上拿著香蕉的猴子。。。關鍵這些我都能隨便刪減,太不安全了。
控制反轉可以解決,比如用ninject直接把ikernel當做引數傳遞就行了,但是這樣到處都是ninject的引用,哪一天脫離ninject我的**就不能執行了。還有一種解決方法,就是把組合做複雜,乙個組合弄n層巢狀。。。這樣就是太麻煩
關於繼承
雖然說繼承太多層不好,但適當的繼承可以減少**的復用,用繼承之後一些函式呼叫,就是呼叫自己的東西,**很簡潔。平常用組合。所以適當的繼承沒問題。
組合繼承和寄生式組合繼承
組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...
繼承和組合
繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...
繼承和組合
1.相同點 二者都是實現類重用的重要方式。2.不同點 繼承會破壞封裝性。例 class a public void breath class b extends a class c extends a 則b,c物件則能夠訪問a中的public方法和屬性,在一定程度上破壞了類的封裝性。使用組合的方法如...