常見重構方法大彙總

2021-10-09 19:08:11 字數 3518 閱讀 2022

**的壞味道

一般重構方法

使用模式重構

重複**

提煉方法

提取類方法上移

替換演算法

鏈構造方法

構造template method

以composite取代一/多之分

引入null object

用adapter統一介面

用fatory method引入多型建立

過長方法

提取方法

組合方法

以查詢取代臨時變數

引入引數物件

保持物件完整

轉移聚集操作到vistor

以strategy取代條件邏輯

以command取代條件排程程式

轉移聚集操作到collecting parameter

過長引數列

以方法取代引數

引入引數物件

保持物件完整

條件邏輯過度複雜

分解條件式

合併條件式

合併重複的條件片段

移除控制標記

以衛語句取代巢狀條件式

以多型取代條件式

引入斷言

引入解釋性變數

引入函式

strategy取代條件邏輯

轉移裝飾功能到decorator

以state取代狀態改變條件語句

引入null object

分支語句

提取方法

轉移方法

以子類取代型別**

以多型取代條件式

已明確方法取代引數

state/strategy取代型別**

引入null object

command替換條件排程程式

轉移聚集操作到visitor

基本型別迷戀

程式**過於依賴基本型別(int,string,double,array等低層次語言要素)

以物件取代資料值

以型別取代型別**

以子類取代型別**

提取類引入引數物件

以物件取代陣列

以state取代狀態改變條件語句

以strategy取代條件邏輯

以composite取代隱含樹

以interpreter取代隱式語言

轉移裝飾功能到decorator

用builder封裝composite

資料泥團

在類的字段和引數列中,總是一起出現的資料

提取類引入引數物件

保持物件完整

令人迷惑的臨時字段

提取類引入null object

組合**

許多段**使用不同種類或數量的資料或物件做同樣的事情(例如使用特定條件和資料庫查詢)

以interpreter取代隱式語言

過大類

提取類提取子類

提取介面

複製被監視資料

以command取代條件排程程式

以state取代狀態改變條件語句

以interpreter取代隱式語言

冗贅類

不再做很多任務作或沒有用的類

摺疊繼承關係

內聯singleton

不恰當的暴露

在客戶**中不應看到類的字段和方法,卻是公開可見的

封裝字段

封裝群集

移除設定方法

隱藏方法

用factory封裝類

發散式變化

類經常因為不同的原因在不同方向上發生變化,顯然是違反了單一職責原則

提取類霰彈式修改

如果遇到變化,必須在不同的類中作出相應的修改

轉移方法

轉移字段

內聯類將建立知識搬移到factory

依戀情結

方法對於某個類的興趣高過對自己所處的宿主類

轉移方法

提取方法

引入strategy

引入visitor

平行繼承體系

當為乙個類增加乙個子類時,也必須在另乙個類中增加乙個相應的子類

轉移方法

轉移字段

夸夸其談未來性

摺疊繼承關係

內聯類移除引數

移除方法

過度耦合的訊息連

不斷的向乙個物件索求另乙個物件

隱藏委託

提取方法

轉移方法

使用抽象引入chain of responsibility

中間轉手人

類介面中有很多方法都委託給其他類

移除中間轉手人

內聯方法

以繼承取代委託

狎暱關係

類之間彼此依賴於其private成員

轉移方法

將雙向關聯改為單向

提取類隱藏委託

以繼承取代委託

異曲同工的類

重新命名方法

轉移方法

提取超類

用adapter統一介面

不完善的程式庫類

引入外加方法

引入本地擴充套件

用adapter統一介面

用facade封裝類

純稚的資料類

只擁有欄位的資料類

封裝字段

封裝集合

移除設定方法

轉移方法

隱藏方法

被拒絕的遺贈

繼承父類時,子類想要選擇繼承的成員

以委託取代繼承

過多的注釋

為糟糕的**寫大量的注釋

使用一起重構方法,使方法本身達到自說明的效果,讓注釋顯得多餘

怪異解決方案

在同一系統中使用不同的方式解決同一問題

替換演算法

用adapter統一介面

常見sql彙總

新建表 create table ssss id varchar2 64 char not null,address varchar2 255 char age number 10 name varchar2 255 char 增加字段 alter table 表名 add 欄位名 型別 值 alt...

常見操作彙總

搜尋命令 busybox find name gralloc 檢視正在執行的程式包名 adb s 172.22.217.111 5555 shell dumpsys window grep mcurrentfocus 編譯命令 單個編譯 arm none linux gnueabi gcc o he...

面試常見彙總

如果需要獲取最大的k個值,可以建個小堆。否則,建大堆。vs下的是1.5倍擴容,linux下因為要考慮到和記憶體管理的夥伴演算法相容,所以採用2倍擴容的方式。如何高效的使用vector,盡量避免擴容呢?如果提前知道vector要存的資料個數,則可以使用reserve n 函式來避免多次擴容所導致的效率...