簡略講授Java設計形式編程中的單一職責准繩。本站提示廣大學習愛好者:(簡略講授Java設計形式編程中的單一職責准繩)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略講授Java設計形式編程中的單一職責准繩正文
單一職責准繩:一個類,只要一個惹起它變更的緣由。
為何須要單一職責准繩?
假如一個類有多個緣由要去修正它,那末修正一個功效時,能夠會讓其他功效發生Bug,所以一個類最好只要一個職責。但現實運用中照樣比擬難完成的,我們只能是盡可能相符這個准繩。
有時刻,開辟人員設計接口的時刻會有些成績,好比用戶的屬性和用戶的行動被放在一個接口中聲明。這就形成了營業對象和營業邏輯被放在了一路,如許就形成了這個接口有兩種職責,接口職責不明白,依照SRP的界說就違反了接口的單一職責准繩了。
上面是個例子:
package com.loulijun.chapter1;
public interface Itutu {
//身高
void setShengao(double height);
double getShengao();
//體重
void setTizhong(double weight);
double getTizhong();
//吃飯
boolean chiFan(boolean hungry);
//上彀
boolean shangWang(boolean silly);
}
下面的例子就存在這個成績,身高、體重屬於營業對象,與之響應的辦法重要擔任用戶的屬性。而吃飯、上彀是響應的營業邏輯,重要擔任用戶的行動。然則這就會給人一種不曉得這個接口究竟是做甚麼的感到,職責不清楚,前期保護的時刻也會形成各類各樣的成績。
處理方法:單一職責准繩,將這個接口分化成兩個職責分歧的接口便可
ItutuBO.java:擔任tutu(塗塗,假設是小我名)的屬性
package com.loulijun.chapter1;
/**
* BO:Bussiness Object,營業對象
* 擔任用戶的屬性
* @author Administrator
*
*/
public interface ItutuBO {
//身高
void setShengao(double height);
double getShengao();
//體重
void setTizhong(double weight);
double getTizhong();
}
ItutuBL.java:擔任塗塗的行動
package com.loulijun.chapter1;
/**
* BL:Business Logic,營業邏輯
* 擔任用戶的行動
* @author Administrator
*
*/
public interface ItutuBL {
//吃飯
boolean chiFan(boolean hungry);
//上彀
boolean shangWang(boolean silly);
}
如許就完成了接口的單一職責。那末完成接口的時刻,就須要有兩個分歧的類
TutuBO.java
package com.loulijun.chapter1;
public class TutuBO implements ItutuBO {
private double height;
private double weight;
@Override
public double getShengao() {
return height;
}
@Override
public double getTizhong() {
return weight;
}
@Override
public void setShengao(double height) {
this.height = height;
}
@Override
public void setTizhong(double weight) {
this.weight = weight;
}
}
TutuBL.java
package com.loulijun.chapter1;
public class TutuBL implements ItutuBL {
@Override
public boolean chiFan(boolean hungry) {
if(hungry)
{
System.out.println("去吃暖鍋...");
return true;
}
return false;
}
@Override
public boolean shangWang(boolean silly) {
if(silly)
{
System.out.println("好無聊啊,上會網...");
return true;
}
return false;
}
}
如許就清楚了,當須要修正用戶屬性的時刻只須要對ItutuBO這個接口來修正,只會影響到TutuBO這個類,不會影響其他類。
總結:
1. 現實情形是,許多時刻我們沒法提早預感“惹起變更的緣由”,所以我們只能憑經歷結構我們的接口,盡可能做到一個接口只要一個職責。這裡說的是接口,類能夠會有繼續和完成多個接口,加倍難以完成單一職責。
2. 當之前寫的類曾經有多個惹起變更的緣由時,我們最好做代碼重構。
然則、應用單一職責准繩有一個成績,“職責”沒有一個明白的劃分尺度,假如把職責劃分的太細的話會招致接口和完成類的數目劇增,反而進步了龐雜度,下降了代碼的可保護性。所以應用這個職責的時刻還要詳細情形詳細剖析。建議就是接口必定要采取單一職責准繩,完成類的設計上盡量做到單一職責准繩,最好是一個緣由惹起一個類的變更。