设计模式与重构汇总
單一原則:引起一個類發生變化的原因只有一個
開放封閉原則:對于類的修改是封閉的,而對于類的擴展是開放的
依賴倒置原則:高層不依賴于底層,都應該依賴與抽象;抽象不依賴于細節,細節依賴于抽象;
里氏代換原則:子類可以代替父類出現;
繼承是父類、實現是接口;
依賴是方法中的參數用到了別的類,
關聯是類中的屬性有別的類而且自己不維護,
組合要自己維護屬性中其他類的生命周期,
聚合通過構造函數傳入實例化好的對象,不再構造方法中實例化
創建型設計模式:單例模式、方法工廠模式、抽象工廠模式、建造者模式、原型模式
建構型設計模式:外觀模式、組合模式、裝飾器模式、代理模式、享元模式、橋接模式、適配器模式
行為型設計模式:命令模式、解釋器模式、責任鏈模式、訪問者模式、觀察者模式、中介者模式、迭代模式、模版方法模式、策略模式、狀態模式、備忘錄模式
代碼中常見的“壞味道”:
重復代碼、過長的函數、過大的類、過長的參數列表、依戀情結、發散式變化、散彈式修改、數據泥團、基本類型偏執、
夸夸其談未來性、平行繼承體系、switch語句、過度的消息鏈、中間人、冗贅類、過多的注釋、令人迷惑的暫時字段、
狎昵關系、異曲同工的類、不完美的類庫、純稚的數據類、被拒絕的遺贈
/*/*/*/**/*/*/*/*/*/*/*/**/*/*/*/*/*/*重構:
重新組織函數:(在方法中沒一個臨時變量只能被賦值一次,當然除了那些結果收集型的臨時變量)
1.方法提煉 2.方法內聯 3.局部變量內聯 4.用查詢替代局部變量 5.引入解釋性臨時變量 6.拆分臨時變量 7.移除對參數的賦值(把對參數的賦值,改為對臨時變量的賦值)
8.以函數對象取代函數 9.替換算法
在對象間搬移特性:
1.搬移方法 2.搬移字段 3.提煉類 4.內聯類 5.隱藏委托關系(客戶端通過服務對象的字段得到另一個對象,然后調用后者的函數)6.移除中間人 7.引入外加函數 8.引入本地擴展(子類或包裝類)
重新組織數據:
1.Self Encapsulate Field(自封裝字段) 2.Replace Data Value with Object(以對象取代數據值)
3.Change Value to Reference(以引用對象取代值對象) 4.Change Reference to Value(以值對象取代引用對象)
5.Repalce Array With Object(以對象代替數組) 6.Duplicate Observed Data(復制“被監視變量”) 7.Change Unidirectional Association to Bidirectional(將單向關聯改為雙向關聯)
8.Change Bidirectional Association to Unidirectional(將雙向關聯改為單向關聯) 9.Replace Magic Number with Symbolic Constant(以字面常量取代魔法數) 10.Encapsulate Field(封裝字段)
11.Encapsulate Collection(封裝集合) 12.Repalce Record with Data Class(以數據類取代記錄) 13.Replace Type Code with Class(以類取代類型碼) 14.Replace Type Code with SubClass(以子類取代類型碼)
15.Replace Type Code with State/Strategy(以 State/Strategy取代類型碼) 16. Replace SubClass with Fields(以字段取代子類)
簡化條件表達式:
1.Decompose Conditional(分解條件表達式) 2.Consolidate Conditional Expression(合并條件表達式) 3.Consolidate Duplicate Conditional Fragments(合并重復的條件片段)
4.Remove Control Flag(移除控制標記) 5.Replace Nested Conditional with Guard Clause(以衛語取代嵌套條件表達式) 6.Replace Conditional with Polymorphism(以多態取代條件表達式)
7.Introduce Null Object(引入Null對象) 8.Introduce Assertion(引入斷言)
簡化函數調用:
1.Rename method(函數改名) 2.Add Parameter(添加參數) 3.Remove Parameter(移除參數) 4.Separate Query from Modifer(將查詢函數和修改函數分離)
5.Parameterize Moethod(令函數攜帶參數) 6.Rplace Parameter with Explicit Methods(以明確函數取代參數) 7.Preserve Whole Object(保持對象完整)
8.Replace Parameter with Methods(以函數取代參數) 9.Introduce Parameter Object(引入參數對象) 10.Remove Setting Method(移除設值函數)
11.Hide Method(隱藏函數) 12.Repalce Constuctor with Factory Method(以工廠函數取代構造函數) 13.Encapsulate Downcast(封裝向下轉型) 14.Replace Error Code with Exception(以異常取代錯誤代碼)
15.Replace Exception with Test(以測試取代異常)
處理概括關系:
1.Pull up Field(字段上移)2.Pull Up Method(函數上移) 3.Pull Up Constructor Body(構造函數體上移) 4.Push Down Method(函數下移) 5.Push Down Field(字段下移)
6.Extract Subclass(提煉子類) 7.Extract Superclass(提煉超類) 8.Extract Interface(提煉接口) 9.Collapse Hierarchy(折疊繼承體系) 10.Form TemPalte Method(塑造模版函數)
11.Replace Inheritance with Delegation(以委托取代繼承) 12.Repalce Delegation with Inheritance(以繼承取代委托)
大型重構:
1.Tease ApartInheritacne(梳理并分解繼承體系) 2.Convert Procedural Design to Objects(將過程化設計轉化為對象設計)
3.Separate Domain fro Presentation(將領域和表述/顯示分離) 4.Extract Hierarchy(提煉集成體系)
總結
- 上一篇: scala初学之helloWorld
- 下一篇: 蓝桥杯第五届省赛JAVA真题----七对