一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 簡單講解Java設計模式編程中的單一職責原則

簡單講解Java設計模式編程中的單一職責原則

2020-03-31 11:37lixiang0522 JAVA教程

這篇文章主要介紹了Java設計模式編程中的單一職責原則,這在團隊開發編寫接口時經常使用這樣的約定,需要的朋友可以參考下

單一職責原則:一個類,只有一個引起它變化的原因。

為什么需要單一職責原則?
如果一個類有多個原因要去修改它,那么修改一個功能時,可能會讓其他功能產生Bug,所以一個類最好只有一個職責。但實際應用中還是比較難實現的,我們只能是盡量符合這個原則。

有時候,開發人員設計接口的時候會有些問題,比如用戶的屬性和用戶的行為被放在一個接口中聲明。這就造成了業務對象和業務邏輯被放在了一起,這樣就造成了這個接口有兩種職責,接口職責不明確,按照SRP的定義就違背了接口的單一職責原則了。

下面是個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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(涂涂,假如是個人名)的屬性

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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:負責涂涂的行為

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.loulijun.chapter1;
/**
 * BL:Business Logic,業務邏輯
 * 負責用戶的行為
 * @author Administrator
 *
 */
public interface ItutuBL {
  //吃飯
  boolean chiFan(boolean hungry);
  //上網
  boolean shangWang(boolean silly);
}

這樣就實現了接口的單一職責。那么實現接口的時候,就需要有兩個不同的類

TutuBO.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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. 當以前寫的類已經有多個引起變化的原因時,我們最好做代碼重構。

但是、使用單一職責原則有一個問題,“職責”沒有一個明確的劃分標準,如果把職責劃分的太細的話會導致接口和實現類的數量劇增,反而提高了復雜度,降低了代碼的可維護性。所以使用這個職責的時候還要具體情況具體分析。建議就是接口一定要采用單一職責原則,實現類的設計上盡可能做到單一職責原則,最好是一個原因引起一個類的變化。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国甜性涩爱在线播放 | 久久中文字幕亚洲 | 四虎永久免费在线观看 | 香蕉eeww99国产精选播放 | 性奶乳妇| 色热综合 | 狠狠色综合久久久久尤物 | 九九免费精品视频 | 国产乱人乱精一区二区视频密 | 五月天婷婷精品免费视频 | 国产美女久久精品香蕉69 | 日本午夜视频 | 午夜无码国产理论在线 | 动漫美女被褥吸奶漫画漫画 | 免费永久视频 | 国产一卡2卡3卡4卡公司科普 | 色综合中文字幕天天在线 | 免费欧美视频 | 成人私人影院www片免费高清 | 娇妻与公陈峰姚瑶小说在线阅读 | 99年水嫩漂亮粉嫩在线播放 | 赤色疑惑 | 成人国产在线视频在线观看 | 国产一级视频久久 | 小小水蜜桃视频高清在线播放 | 精品区2区3区4区产品乱码9 | 99国产国人青青视频在线观看 | 欧美国产日本精品一区二区三区 | 美女禁区视频免费观看精选 | 热久久最新视频 | 亚洲视频一区网站 | 2023最新伦理片 | 欧美成人另类人妖 | 精品国产免费一区二区三区 | ak福利影院 | 91色资源网在线观看 | 精品美女国产互换人妻 | 亚洲AV久久无码精品九号 | 精品国产国产精2020久久日 | 日本黄色一区 | 黑人日白人 |