之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面,
1、擴展方法
擴展方法是一種特殊的靜態方法,可以像該類的實體方法一樣使用,能夠在不添加新的派生類,重新編譯的情況下,向現有類添加功能
注意事項:
a、必須定義在非泛型靜態類中
b、必須是public的靜態方法,并且第一個方法必須使用this關鍵字修飾
c、使用using關鍵字顯示匯入擴展方法命名空間后才能使用
d、實體方法優先于擴展方法執行
e、可以在空參考上呼叫擴展方法
f、擴展方法可以被繼承
2、partial
partial關鍵字拆分一個類、結構、介面、方法的定義至多個檔案中,每個源檔案中包含型別或方法定義的一部分,在編譯時被組合成一個完整的類,
使用場景:
a、一個類分布于多個獨立檔案中跨域讓多位程式員同事對該類進行處理
b、當使用自動生成檔案的源檔案時,將自動生成的代碼與手動添加的代碼分布在不同檔案
注意事項:
a、不分類的各個部分必須具有相同的可訪問性
b、如果將任意部分宣告為抽象類
c、如果任意部分宣告了其基型別,則整個類繼承該類
d、部分類的各個部分都必須在同一程式集和同一模塊(.exe 或 .dll 檔案)中進行定義,
e、部分方法必須以partial開頭,不能包含out引數,不能為virtual方法,回傳值必須為void
f、可以為已定義并實作的分部方法生成委托,但不能為已經定義但未實作的分部方法生成委托
3、繼承
a、面向物件的三大特征之一
b、通過繼承可以重用、擴展、修改積累中的行為
c、基類具有傳遞性
Struct結構是否支持繼承?
如何防止類被進一步派生?
如何在派生類中隱藏類成員?
繼承缺點:
a、類只支持單繼承
b、破壞封裝,子類與父類之間緊密耦合,子類依賴于父類的實作,子類缺乏獨立性,基類細節對派生類可見
c、子類不能改變父類的介面
e、不支持動態繼承,在運行時,子類無法選擇不同的父類
4、繼承之模板方法
定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個演算法的結構即可沖定義該演算法的某些特定步驟
使用場景:
a、有多個子類共有的方法,且邏輯相同
b、重要的、復雜的方法,可以考慮作為模板方法
優點:
a、封裝不變部分,擴展可變部分
b、提取公共代碼,便于維護
c、行為由父類控制,子類實作
缺點:
每一個不同的實作都需要一個子類來實作,導致類的個數增加,使得系統更加龐大,
5、組合
什么是組合?
組合是通過對現有的物件進行拼裝(組合)產生新的、更復雜的功能
優點:
a、不破壞封裝,整體類與區域類之間松耦合,彼此相互獨立
b、支持動態組合,在運行時可以設定不同的區域實作
c、整體可以對區域類進行包裝,封裝區域類的介面,提供新的介面
缺點:
a、創建整體類的物件時,需要創建所有區域類的物件
b、設計復雜度增高
6、建造者模式(在后續的文章中,會詳細描述下設計模式)
建造者模式將一個復雜的構建與其表示相分離,是的同樣的構建程序可以創建不同的表示
主要角色:
a、控制者(Director):控制物件的組合程序
b、構建者(Builder):構建者介面,定義構建各部件的方法,
c、實際構建者(ConcreteBuilder):具體構建出各部件物件,獲得構造結構,
d、被創建者(Product):構建者操作的主要物件
使用場景:
a、被創建者物件由很多組件構成,他們之前創建的順序不變,但是組件的創建細節不一致
b、被創建者物件具有復雜的內部結構
c、被創建者物件內部屬性本身相互依賴
優點:
a、建造者獨立,易擴展
b、便于控制細節風險
缺點:
a、產品必須有共同點,范圍有限制
b、內部變化復雜,會有很多的建造類
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/46472.html
標籤:設計模式
上一篇:模板方法模式
下一篇:設計模式六大原則
