最近在對專案中的**進行重構,在重構的過程中發現了一些很有趣的東西,就是泛型和委託!
泛型和委託給我的重構帶來了很大的便利,我也對它們在重構的技術上有了一些新的認識!
如果小菜說的不對,還請園友們幫我指出,我會虛心接受的,謝謝~!
下面我只是說泛型和委託在重構時的一些觀點,不包含泛型和委託的所有知識點!
一丶泛型
重構前**:
1public
class
test214
}1516public
person1 test1() //很簡單,返回乙個物件例項
1721
22public
person2 test2() //這個也是返回乙個物件例項
2327}28
29public
class
person1
3031
32public
class
person2
33
分析:①首先看到有兩個方法的操作行為都是返回物件例項!
②也就是操作行為是相似的,但是返回的型別是不一樣的!
③找到了相同點之後,我們就要對經常變化的點進行封裝了,也就是我們要封裝型別的變化點!
③最後我們很容易想到用泛型實現這樣的需求!
重構後**:
1public
class
test214
}1516public t testtwo() where t : class,new
() //通過泛型來封裝型別變化點
1721}22
23public
class
person1
2425
26public
class
person2
27
結論:泛型封裝型別變化點
通過泛型來傳遞型別,規定現在我們應該使用哪一種型別,這樣就可以做到型別封裝,從而做到以不變應萬變!
二丶委託
重構前**:
1public
class
test212
}1314public
void
test2()
1523}24
25public
void
generateentity1(datarow datarow)
2629
30public
void
generateentity2(datarow datarow)
3134 }
分析:①首先會看到test1和test2方法中在生成entity時會有foreach迴圈的重複**!
②要想提取出兩邊的通用**,需要分析兩邊哪些**是一樣的,哪些是變化的,這樣我們就能提取出不變的**,而用一些技術來封裝變化點,最終做到通用!
③我們很容易發現foreach迴圈的**是一樣的,生成entity是不一樣的,但是在仔細看一下生成entity方法的引數和返回值是一樣的!
④那麼怎麼來封裝那個經常變化的點呢?
⑤我們想到委託,通過委託來傳遞操作行為來做到變化!
重構後**:
1public
class
test228
9public
void
test2()
1014
15public
void
generateentity1(datarow datarow)
1619
20public
void
generateentity2(datarow datarow)
2124
25private
void generateentity(datatable table, actionaction) //
通過委託來實現操作行為的傳遞
2631
}32 }
結論:委託封裝行為操作變化點
通過傳遞委託例項來指定我需要使用那種操作行為,如果發現返回值不一樣,那麼再加上泛型來封裝型別的變化點,最後就構成了委託和泛型的綜合利用!
三丶總結
其實就是想說在實踐中進行思考,進行總結,最終一定會有不一樣的收穫!
已同步至:個人文章目錄索引
java學習之路 第二十九天
c.css中的背景 在css中可以使用顏色作用背景顏色,還可以使用作為背景。在使用顏色作為背景的使用注意要使用顏色的16進製表示。如果你的頁面使用顏色作為背景,建議網頁的背景顏色為 aaaaaa ffffff 顏色是越來越淡,一般使用 eeeeee作為背景比較多 使用作為背景 background ...
C 學習筆記 泛型委託Action和Fun
本節學習了泛型委託action和fun兩類特殊的委託,這兩個特殊的委託是dot framewrok自帶的。結合lambda表示式,可以在寫程式時,簡潔 和提高編碼效率。一 action和fun兩個委託的不同點 action只能委託必須是無返回值的方法 fun只是委託必須有返回值的方法 二 演練 us...
C 學習筆記 泛型委託Action和Fun
本節學習了泛型委託action和fun兩類特殊的委託,這兩個特殊的委託是dot framewrok自帶的。結合lambda表示式,可以在寫程式時,簡潔 和提高編碼效率。一 action和fun兩個委託的不同點 action只能委託必須是無返回值的方法 fun只是委託必須有返回值的方法 二 演練 us...