**的壞味道
一般重構方法
使用模式重構
重複**
提煉方法
提取類方法上移
替換演算法
鏈構造方法
構造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 函式來避免多次擴容所導致的效率...