今天確實有點小冷了.真不想起床,也沒什麼胃口吃東西.繼續去上課~~~~ :-(
最近學的東西感覺都有時間去消化,慢慢來~~~~看看新聞什麼的調節下.今天微博貌似很火爆..各種戀愛啊..
跑題了.繼續**吧...
這次說的是繼承的第一原則
對於【繼承】的第一印象就是獲得了父的所有方法和屬性,所以相對於繼承了父的功能和職責。而後面自己的設計也是基
於這個原則,就是復用原則,復用父項的方法原則。慢慢的延伸就是有多個子類,就會把幾個子類共用的一些方法放到父類
裡面,而這種設計思想深深的影響了自己很久。
而這種方法卻在近年來被自己慢慢的推翻,現在使用繼承的第一原則就是模板,template。通過父類使用template模式
,構造出子類的流程,而自己只是在對應的鉤子方法(hook)裡面填充著差異的地方,如果不是這種情況,我會盡量的減少
繼承的使用。對於原來的把子類的方法推到父類的方法裡面,則通過其它的方式進行消除掉了。造成這種變化,只是源於一
個原則的影響,【一切私有方法都是有罪的】。
在編碼的時候,大量的把方法推到父類之後,才發現這些方法,別的地方也會需要,而這個時候,就很痛苦,因為通過繼
承肯定不行,但是不繼承,別的地方就需要copy乙份,不copy就需要把這個方法變成靜態的方法,而這個時候,就會出現
很奇怪的關係了。這種問題,我一般都是把這些方法歸屬到幾個其它類中,因為呼叫super.method(),和呼叫
other.method()實際上**是一樣的,都沒有減少和增加,但是類的職責卻清晰了很多。
近些年隨著ioc的增多,那麼template的使用也自然增多了很多,所以也自然的傾向於父類定義流程,子類實現差異的方
式來做,而不是父類提供方法,子類進行組裝。兩種差異的直觀比較,見下面的**。
第一種方式:父類提供大量方法,子類組裝
1 public class fathermehod
67 protected void b()
1011 protected void c()
1415 }
1 public class sonsetup extends fathermehod
7 }第二種方法:父類提供流程,子類實現差異(template)
1 public abstract class fathertemplate
78 protected abstract void a();
9 protected abstract void b();
10 protected abstract void c();
11 }
1 public class sondiff extends fathertemplate
67 protected void b()
1011 protected void c()
1415 }
差異就在於在第一種方式裡面子類實現的**,變成父類實現了,實現了控制反轉(ioc),這個就是我的繼承的第一原則
,template。
.哦對了,昨天那個還沒弄.算了,**不在,明天再發..
C 繼承構造原則
構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承 子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法 因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。如果沒有顯式的建構函式,編譯器會給乙個預設的建構函式,並且該預設的建構函式僅僅...
C 繼承裡的 就近原則
參考部落格 用三個類來描述c 繼承中的就近原則 animal類,bird類,chicken類 1.類關係 類之間的關係如下 public abstract class animal public class bird animal type private string color public s...
第一節 開閉原則和黎克特制替換原則
一.開閉原則 1.定義 對擴充套件開放,對修改關閉。當應用的需求改變時,在不修改軟體實體的源 前提下,可以擴充套件模組的功能,使其滿足新的需求。2.作用 1 對軟體測試的影響 軟體遵守開閉原則的話,軟體測試時只需要對擴充套件的 進行測試就可以了,因為原有的測試 仍然能夠正常執行。2 可以提高 的可復...