成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計模式6大原則:單一職責原則

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

單一職責原則(Single Responsibility Principle),簡稱SRP。

定義:

There should never be more than one reason for a class to change.

應該有且僅有一個原因引起類的變更。

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

下面是個例子:

  1. package com.loulijun.chapter1;  
  2.    
  3. public interface Itutu {  
  4.     //身高  
  5.     void setShengao(double height);  
  6.     double getShengao();  
  7.     //體重  
  8.     void setTizhong(double weight);  
  9.     double getTizhong();  
  10.     //吃飯  
  11.     boolean chiFan(boolean hungry);  
  12.     //上網  
  13.     boolean shangWang(boolean silly);  

上面的例子就存在這個問題,身高、體重屬于業務對象,與之相應的方法主要負責用戶的屬性。而吃飯、上網是相應的業務邏輯,主要負責用戶的行為。但是這就會給人一種不知道這個接口到底是做什么的感覺,職責不清晰,后期維護的時候也會造成各種各樣的問題。

解決辦法:單一職責原則,將這個接口分解成兩個職責不同的接口即可

ItutuBO.java:負責tutu(涂涂,假如是個人名)的屬性

  1. package com.loulijun.chapter1;  
  2.    
  3. /**  
  4.  * BO:Bussiness Object,業務對象  
  5.  * 負責用戶的屬性  
  6.  * @author Administrator  
  7.  *  
  8.  */ 
  9. public interface ItutuBO {  
  10.     //身高  
  11.     void setShengao(double height);  
  12.     double getShengao();  
  13.     //體重  
  14.     void setTizhong(double weight);  
  15.     double getTizhong();  

ItutuBL.java:負責涂涂的行為

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

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

TutuBO.java

  1. package com.loulijun.chapter1;  
  2.    
  3. public class TutuBO implements ItutuBO {  
  4.     private double height;  
  5.     private double weight;  
  6.     @Override 
  7.     public double getShengao() {         
  8.         return height;  
  9.     }  
  10.    
  11.     @Override 
  12.     public double getTizhong() {  
  13.         return weight;  
  14.     }  
  15.    
  16.     @Override 
  17.     public void setShengao(double height) {  
  18.         this.height = height;  
  19.     }  
  20.    
  21.     @Override 
  22.     public void setTizhong(double weight) {  
  23.         this.weight = weight;  
  24.     }  
  25.    

TutuBL.java

  1. package com.loulijun.chapter1;  
  2.    
  3. public class TutuBL implements ItutuBL {  
  4.    
  5.     @Override 
  6.     public boolean chiFan(boolean hungry) {  
  7.         if(hungry)  
  8.         {  
  9.             System.out.println("去吃火鍋...");  
  10.             return true;  
  11.         }  
  12.         return false;  
  13.     }  
  14.    
  15.     @Override 
  16.     public boolean shangWang(boolean silly) {  
  17.         if(silly)  
  18.         {  
  19.             System.out.println("好無聊啊,上會網...");  
  20.             return true;  
  21.         }  
  22.         return false;  
  23.     }  
  24.    

這樣就清晰了,當需要修改用戶屬性的時候只需要對ItutuBO這個接口來修改,只會影響到TutuBO這個類,不會影響其他類。

那么單一職責原則的意義何在呢?

  1. 降低類的復雜性,實現什么樣的職責都有清晰的定義
  2. 提高可讀性
  3. 提高可維護性
  4. 降低變更引起的風險,對系統擴展性和維護性很有幫助

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

原文鏈接:http://www.cnblogs.com/loulijun/archive/2012/03/03/2378642.html

【編輯推薦】

  1. 如何在Oracle中使用Java存儲過程(詳解)
  2. 郵件功能開發:JavaMail
  3. 設計模式6大原則:接口隔離原則
  4. 設計模式6大原則:依賴倒置原則
  5. 6個提高Java開發者效率的工具
責任編輯:林師授 來源: 婁立軍的博客
相關推薦

2012-03-15 11:15:13

Java設計模式

2012-03-05 13:58:34

設計模式里氏置換

2012-03-07 10:40:19

Java設計模式

2012-03-07 11:03:13

Java設計模式

2012-03-12 16:10:26

Java設計模式

2011-09-07 09:21:01

設計模式

2009-09-27 14:12:12

面向對象設計單一職責

2015-09-23 17:12:18

API設計原則

2010-05-07 17:59:05

Unix服務器

2015-09-24 08:52:53

API設計原則

2021-07-29 14:42:55

設計模式Java

2010-03-31 17:26:52

SaaS

2010-09-09 13:54:06

DIV CSS

2024-10-14 09:52:39

軟件項目開發軟件項目估算

2017-07-11 05:03:54

數據分析大數據數據

2020-09-18 11:25:43

智能

2011-07-19 18:13:15

高效數據庫

2020-06-09 07:00:00

面向對象編程編程原則

2012-02-01 13:24:37

2010-09-14 13:49:38

CSS代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费在线看a | 国产露脸国语对白在线 | 91最新入口| 国产视频在线观看一区二区三区 | 亚洲第一在线 | 久久久精品 | 色接久久| 欧美午夜视频 | 欧美日韩中文在线 | 国产成人免费网站 | 亚洲国产精品人人爽夜夜爽 | 天天插天天操 | 综合久久综合久久 | 久久之精品| 国产一区二区三区在线免费 | 国产免费一区二区 | 国产午夜亚洲精品不卡 | 成人在线小视频 | 国色天香综合网 | 日韩成人精品一区二区三区 | 国产精品视频入口 | 日韩免费一区二区 | 91国内精精品久久久久久婷婷 | 国产精品高清一区二区三区 | 免费一区 | 中日韩欧美一级片 | 黑人久久久 | 超碰97干| 日韩区 | 青青草中文字幕 | 做a视频| 国产精品揄拍一区二区久久国内亚洲精 | 欧美国产日韩在线 | 激情麻豆视频 | 皇色视频在线 | 国产精品国产 | 九九看片 | 精品免费在线 | 久精品久久 | 国产成人av在线 | 国产亚洲精品综合一区 |