中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java單一職責原則怎么實現

發布時間:2022-02-09 16:49:25 來源:億速云 閱讀:188 作者:iii 欄目:開發技術

這篇文章主要講解了“Java單一職責原則怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java單一職責原則怎么實現”吧!

1.什么是單一職責原則?

首先我們可以對某個類來說,即一個類應該只負責一項職責。如類A負責兩個不同職責: 職責1,職責2。當職責1需求變更而改變A時,可能造成職責2執行錯誤,所以需要將類A的粒度分解為A1,A2。

我們來看下面這段代碼:????????????

package com.szh.principle.singleresponsibility;
 
/**
 * 交通工具類
 *  方式1
 *  1. 在方式1的run方法中,違反了單一職責原則
 *  2. 解決的方案非常的簡單,根據交通工具運行方法不同,分解成不同類即可
 */
class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + " 在公路上運行....");
    }
}
 
public class SingleResponsibility1 {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托車");
        vehicle.run("汽車");
        vehicle.run("飛機");
        vehicle.run("輪船");
    }
}

乍一看沒什么問題吧,但是我們運行之后,看到的結果似乎就不太合乎思維邏輯了。摩托車、汽車在公路上運行肯定沒問題,但是飛機和輪船呢???(你是故意找茬是不是?)

Java單一職責原則怎么實現

2.改進代碼一

對于上面代碼案例中的問題,想必大家也都看出來了,Vehicle這個類負責的職責太多了,它既要管摩托車、汽車這種在公路上跑的,還要去管飛機這種在天上飛的,這就使得Vehicle這個類粒度太粗了,后期如果做出對公路方法的修改時,可能還會影響到其他的業務功能。

所以我們考慮將Vehicle這個類進行分解,分解為多個類,各干各的、各司其職。

package com.szh.principle.singleresponsibility;
 
/**
 * 方案2的分析
 *   1. 遵守單一職責原則
 *   2. 但是這樣做的改動很大,即將類分解,同時修改客戶端
 *   3. 改進:直接修改Vehicle 類,改動的代碼會比較少=>方案3
 */
class RoadVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路運行");
    }
}
 
class AirVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在天空運行");
    }
}
 
class WaterVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在水中運行");
    }
}
 
public class SingleResponsibility2 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("摩托車");
        roadVehicle.run("汽車");
 
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飛機");
 
        WaterVehicle waterVehicle = new WaterVehicle();
        waterVehicle.run("輪船");
    }
}

此時,我們將Vehicle拆解成了三個不同的類,再次運行。這樣看起來就正常了吧。

不過也有人說,這樣的改動比較大,也即直接在類的層面上做了修改,我們能不能不改動這個類,而是對它的方法做修改呢?答案是可以的。

Java單一職責原則怎么實現

3.改進代碼二

package com.szh.principle.singleresponsibility;
 
/**
 * 方式3的分析
 *   1. 這種修改方法沒有對原來的類做大的修改,只是增加方法
 *   2. 這里雖然沒有在類這個級別上遵守單一職責原則,但是在方法級別上,仍然是遵守單一職責
 */
class Vehicle2 {
    public void runRoad(String vehicle) {
        System.out.println(vehicle + " 在公路上運行....");
    }
 
    public void runAir(String vehicle) {
        System.out.println(vehicle + " 在天空上運行....");
    }
 
    public void runWater(String vehicle) {
        System.out.println(vehicle + " 在水中行....");
    }
}
 
public class SingleResponsibility3 {
    public static void main(String[] args) {
        Vehicle2 vehicle2  = new Vehicle2();
        vehicle2.runRoad("汽車");
        vehicle2.runAir("飛機");
        vehicle2.runWater("輪船");
    }
 
}

此時我們并未將類進行拆解,而是將之前的run方法進行了拆解,雖然這樣的代碼沒有在類的層面上遵守單一職責原則,但是它卻在方法層面上遵守了單一職責原則,同樣可以做到正確的結果。

Java單一職責原則怎么實現

感謝各位的閱讀,以上就是“Java單一職責原則怎么實現”的內容了,經過本文的學習后,相信大家對Java單一職責原則怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

得荣县| 嵊泗县| 财经| 新巴尔虎左旗| 铜陵市| 兰溪市| 恭城| 德昌县| 呼玛县| 固安县| 连平县| 新建县| 宣汉县| 牡丹江市| 永吉县| 南宁市| 噶尔县| 南皮县| 赤城县| 明光市| 双流县| 资阳市| 成都市| 三河市| 金塔县| 洪湖市| 福海县| 星子县| 新宁县| 鹤岗市| 丰原市| 昌江| 大关县| 清流县| 扎囊县| 株洲县| 邳州市| 察雅县| 利辛县| 桂东县| 西吉县|