偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

設(shè)計模式6大原則:單一職責原則

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

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

定義:

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

應(yīng)該有且僅有一個原因引起類的變更。

有時候,開發(fā)人員設(shè)計接口的時候會有些問題,比如用戶的屬性和用戶的行為被放在一個接口中聲明。這就造成了業(yè)務(wù)對象和業(yè)務(wù)邏輯被放在了一起,這樣就造成了這個接口有兩種職責,接口職責不明確,按照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.     //上網(wǎng)  
  13.     boolean shangWang(boolean silly);  

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

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

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

  1. package com.loulijun.chapter1;  
  2.    
  3. /**  
  4.  * BO:Bussiness Object,業(yè)務(wù)對象  
  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,業(yè)務(wù)邏輯  
  4.  * 負責用戶的行為  
  5.  * @author Administrator  
  6.  *  
  7.  */ 
  8. public interface ItutuBL {  
  9.     //吃飯  
  10.     boolean chiFan(boolean hungry);  
  11.     //上網(wǎng)  
  12.     boolean shangWang(boolean silly);  

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

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("好無聊啊,上會網(wǎng)...");  
  20.             return true;  
  21.         }  
  22.         return false;  
  23.     }  
  24.    

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

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

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

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

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

【編輯推薦】

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

2012-03-15 11:15:13

Java設(shè)計模式

2012-03-05 13:58:34

設(shè)計模式里氏置換

2012-03-07 10:40:19

Java設(shè)計模式

2012-03-07 11:03:13

Java設(shè)計模式

2012-03-12 16:10:26

Java設(shè)計模式

2011-09-07 09:21:01

設(shè)計模式

2009-09-27 14:12:12

面向?qū)ο笤O(shè)計單一職責

2015-09-23 17:12:18

API設(shè)計原則

2015-09-24 08:52:53

API設(shè)計原則

2010-05-07 17:59:05

Unix服務(wù)器

2021-07-29 14:42:55

設(shè)計模式Java

2010-09-09 13:54:06

DIV CSS

2010-03-31 17:26:52

SaaS

2024-10-14 09:52:39

軟件項目開發(fā)軟件項目估算

2017-07-11 05:03:54

數(shù)據(jù)分析大數(shù)據(jù)數(shù)據(jù)

2011-07-19 18:13:15

高效數(shù)據(jù)庫

2020-09-18 11:25:43

智能

2020-06-09 07:00:00

面向?qū)ο?/a>編程編程原則

2012-02-01 13:24:37

2010-09-14 13:49:38

CSS代碼
點贊
收藏

51CTO技術(shù)棧公眾號