物件導向六大原則(一) 單一職責原則

2021-07-08 19:57:53 字數 1670 閱讀 3593

一、簡介

單一職責原則(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 單一職責原則 定義 不要存在多於乙個導致類變更的原因。通俗的說,即乙個類只負責一項職責,乙個人只負責做一件事。乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生...

程式設計六大原則之單一職責原則

定義 乙個類只有乙個發生變化的原因。通俗的說,乙個類只負責一項職責。又稱單一功能原則,適用於介面 方法 類 原理 如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力 優點 降低類的複雜度 提高類的可讀性 提高系統的可維護性 變更引起的風險降...