?學(xué)習(xí)Android設(shè)計(jì)模式也有一段時(shí)間了沃但,這段時(shí)間工作不忙线召,想把所學(xué)知識(shí)沉淀下來(lái),決定把設(shè)計(jì)模式的知識(shí)做一個(gè)系列,方便你我嗜暴。廢話不多說(shuō)。
學(xué)習(xí)設(shè)計(jì)模式難免要先學(xué)習(xí)六大原則八千,因?yàn)樵诤竺娴脑O(shè)計(jì)模式運(yùn)用過(guò)程中丈咐,都或多或少的遵循這六大原則。所以要想精通設(shè)計(jì)模式躺率,六大原則必須要熟練掌握玛界。
本篇要講的是單一職責(zé)原則:
1、單一職責(zé)原則(Single Responsibility Principle悼吱,簡(jiǎn)稱SRP )
解釋: 應(yīng)該有且僅有一個(gè)原因引起類(lèi)的變更慎框,通俗來(lái)講就是一個(gè)類(lèi)只干一件事。
看代碼:
//從文件中讀取后添,然后計(jì)算
class Calculator {
//相加
public int add()
throws NumberFormatException, IOException{
//獲取文件內(nèi)容
File file = new File("E:/data.txt");
BufferedReader br = new BufferedReader(
new FileReader(file));
int a = Integer.valueOf(br.readLine());
int b = Integer.valueOf(br.readLine());
//計(jì)算返回值
return a+b;
}
}
可以看出這個(gè)類(lèi)笨枯,承擔(dān)了兩個(gè)職責(zé),獲取文件內(nèi)容 和 計(jì)算兩個(gè)數(shù)的和遇西。
靈活性很差馅精,別人沒(méi)法用。在實(shí)際的開(kāi)發(fā)中粱檀,肯定會(huì)因?yàn)榇罅康腸opy洲敢,產(chǎn)生重復(fù)使用的代碼,并且容易復(fù)制出錯(cuò)茄蚯。
下面我們修改一下將這兩個(gè)職責(zé)分開(kāi):
獲取文本內(nèi)容
//從文件中讀取
class Reader{
int a,b;
public Reader(String path)throws Exception{
BufferedReader br = new BufferedReader(new FileReader(new File(path)));
a= Integer.valueOf(br.readLine);
b= Integer.valueOf(br.readLine);
}
int getA(){
return a;
}
int getB(){
return b;
}
}
- 計(jì)算類(lèi)
//計(jì)算類(lèi)
class Calculator{
//加法
int add(int , int b){
return a+b;
}
//乘法
int multiply(int , int b){
return a*b;
}
//TODO 根據(jù)需要添加其他的算法
}
這樣計(jì)算類(lèi)里面的計(jì)算方法可被任意地方調(diào)用压彭,來(lái)計(jì)算兩個(gè)數(shù)的值,并且第队,增加計(jì)算方法哮塞,也不會(huì)影響其他方法的調(diào)用。
這樣類(lèi)的復(fù)雜度降低凳谦、可讀性提高忆畅、可維護(hù)性提高、擴(kuò)展性提高、降低了變更引起的風(fēng)險(xiǎn)家凯。
需注意: 單一職責(zé)原則提出了一個(gè)編寫(xiě)程序的標(biāo)準(zhǔn)缓醋,用“職責(zé)”或“變化原因”來(lái)衡量接口或類(lèi)設(shè)計(jì)得是否優(yōu)良,但是“職責(zé)”和“變化原因”都是不可以度量的绊诲,因項(xiàng)目和環(huán)境而異,也就是前面我所說(shuō)的送粱,遵循的程度可以自己考量。
好了下一篇講讓程序更穩(wěn)定掂之,更靈活的--開(kāi)閉原則抗俄。喜歡的話,關(guān)注哦世舰,共同進(jìn)步动雹。
寫(xiě)在最后:改變世界,先從改變自己開(kāi)始跟压。---我說(shuō)的
你也可以關(guān)注我的公眾號(hào):碼H.cam 胰蝠, 隨時(shí)隨地學(xué)習(xí)設(shè)計(jì)模式