一、簡介
單一職責原則(single responsibility principle,縮寫:srp),它規定乙個類應該只有乙個引起它發生變化的原因,也就是乙個類中應該是一組相關性很高的函式、資料的封裝。
二、原理
如果乙個類承擔的職責過多,就等於把這些職責耦合在一起了。乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設定,當發生變化時,設計會遭受到意想不到的破壞。如果要想避免這種現象的發生,就要盡可能的遵守單一職責原則。此原則的核心就是解耦和增強內聚性。
三、解決辦法
遵守單一職責原則,將不同的職責封裝到不同的類和模組中。下面引用《android原始碼設計模式解析與實戰》一書中載入器(imageloader)的**例子:
1.初始**
/**
* 載入類
*/public class imageloader
private void initimagecache()};}
public void displayimage(final string url, final imageview imageview)
if(imageview.gettag().equals(url))
mimagecache.put(url,bitmap);
}});
}public bitmap downloadimage(string imageurl)catch (exception e)
return bitmap;
}}
2.重構**:將imageloader一拆為二,imageloader只負責載入,imagecache只負責處理快取的邏輯;這樣,當與快取相關的邏輯需要改變時,不需要修改imageloader類,而載入的邏輯需要修改時也不會影響到快取處理邏輯。
(1)imageloader:
/**
* 載入類
*/public class imageloader
imageview.settag(url);
mexecutorservice.submit(new runnable()
if(imageview.gettag().equals(url))
mimagecache.put(url,bitmap);
}});
}public bitmap downloadimage(string imageurl)catch (exception e)
return bitmap;
}}
(2)imagecache:處理快取
public class imagecache
private void initimagecache()};}
public void put(string url, bitmap bitmap)
public bitmap get(string url)
}
四、分析
這是優化**的第一步。乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生變化時,可能會影響其他的職責。另外,多個職責耦合在一起,會影響復用性。例如:要實現邏輯和介面的分離。
六大原則之單一職責原則
六大原則之單一職責原則 1 什麼是單一職責原則 單一職責比較官方的的定義是 應該有且僅有乙個原因引起類的變更。說的通俗點其實就 像是工廠裡的流水線一樣,每個車間基本上只做一件事,所有車間組合起來就是乙個生產流程。我 們寫程式的時候也可以這樣,將乙個類的功能細化一下爭取做到乙個類只做一件事。到多各類去...
設計模式六大原則 單一職責原則
設計模式六大原則 1 單一職責原則 定義 不要存在多於乙個導致類變更的原因。通俗的說,即乙個類只負責一項職責,乙個人只負責做一件事。乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生...
程式設計六大原則之單一職責原則
定義 乙個類只有乙個發生變化的原因。通俗的說,乙個類只負責一項職責。又稱單一功能原則,適用於介面 方法 類 原理 如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力 優點 降低類的複雜度 提高類的可讀性 提高系統的可維護性 變更引起的風險降...