亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計(jì)模式之單一職責(zé)原則精解

 更新時(shí)間:2022年02月08日 15:27:26   作者:張起靈-小哥  
設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。本篇介紹設(shè)計(jì)模式七大原則之一的單一職責(zé)原則

1.什么是單一職責(zé)原則?

首先我們可以對(duì)某個(gè)類來(lái)說(shuō),即一個(gè)類應(yīng)該只負(fù)責(zé)一項(xiàng)職責(zé)。如類A負(fù)責(zé)兩個(gè)不同職責(zé): 職責(zé)1,職責(zé)2。當(dāng)職責(zé)1需求變更而改變A時(shí),可能造成職責(zé)2執(zhí)行錯(cuò)誤,所以需要將類A的粒度分解為A1,A2。

我們來(lái)看下面這段代碼:??????

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

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

2.改進(jìn)代碼一

對(duì)于上面代碼案例中的問(wèn)題,想必大家也都看出來(lái)了,Vehicle這個(gè)類負(fù)責(zé)的職責(zé)太多了,它既要管摩托車、汽車這種在公路上跑的,還要去管飛機(jī)這種在天上飛的,這就使得Vehicle這個(gè)類粒度太粗了,后期如果做出對(duì)公路方法的修改時(shí),可能還會(huì)影響到其他的業(yè)務(wù)功能。

所以我們考慮將Vehicle這個(gè)類進(jìn)行分解,分解為多個(gè)類,各干各的、各司其職。

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

此時(shí),我們將Vehicle拆解成了三個(gè)不同的類,再次運(yùn)行。這樣看起來(lái)就正常了吧。

不過(guò)也有人說(shuō),這樣的改動(dòng)比較大,也即直接在類的層面上做了修改,我們能不能不改動(dòng)這個(gè)類,而是對(duì)它的方法做修改呢?答案是可以的。

3.改進(jìn)代碼二

package com.szh.principle.singleresponsibility;
 
/**
 * 方式3的分析
 *   1. 這種修改方法沒(méi)有對(duì)原來(lái)的類做大的修改,只是增加方法
 *   2. 這里雖然沒(méi)有在類這個(gè)級(jí)別上遵守單一職責(zé)原則,但是在方法級(jí)別上,仍然是遵守單一職責(zé)
 */
class Vehicle2 {
    public void runRoad(String vehicle) {
        System.out.println(vehicle + " 在公路上運(yùn)行....");
    }
 
    public void runAir(String vehicle) {
        System.out.println(vehicle + " 在天空上運(yùn)行....");
    }
 
    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("飛機(jī)");
        vehicle2.runWater("輪船");
    }
 
}

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

4.單一職責(zé)原則總結(jié)

  • 降低類的復(fù)雜度,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。
  • 提高類的可讀性、可維護(hù)性。
  • 降低代碼變更引起的風(fēng)險(xiǎn)。
  • 通常情況下,我們應(yīng)當(dāng)遵守單一職責(zé)原則。只有邏輯足夠簡(jiǎn)單的情況下,才可以在代碼級(jí)違反單一職責(zé)原則;而只有類中方法數(shù)量足夠少的時(shí)候,才會(huì)建議在方法級(jí)別保持單一職責(zé)原則。

到此這篇關(guān)于Java設(shè)計(jì)模式之單一職責(zé)原則精解的文章就介紹到這了,更多相關(guān)Java 單一職責(zé)原則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot FailureAnalyzer實(shí)例使用教程

    SpringBoot FailureAnalyzer實(shí)例使用教程

    FailureAnalyzer是一種在啟動(dòng)時(shí)攔截exception并將其轉(zhuǎn)換為human-readable消息的好方法,包含在故障分析中。SpringBoot為application context相關(guān)的exceptions,JSR-303驗(yàn)證等提供了這樣的分析器,實(shí)際上很容易創(chuàng)建自己的
    2022-12-12
  • Mybatis-plus通用查詢方法封裝的實(shí)現(xiàn)

    Mybatis-plus通用查詢方法封裝的實(shí)現(xiàn)

    本文主要介紹了Mybatis-plus通用查詢方法封裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java HttpClient實(shí)現(xiàn)socks代理的示例代碼

    Java HttpClient實(shí)現(xiàn)socks代理的示例代碼

    這篇文章主要介紹了Java HttpClient 實(shí)現(xiàn) socks 代理的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java算法之BFS,DFS,動(dòng)態(tài)規(guī)劃和貪心算法的實(shí)現(xiàn)

    Java算法之BFS,DFS,動(dòng)態(tài)規(guī)劃和貪心算法的實(shí)現(xiàn)

    廣度優(yōu)先搜索(BFS)和深度優(yōu)先搜索(DFS)是圖遍歷算法中最常見(jiàn)的兩種算法,主要用于解決搜索和遍歷問(wèn)題。動(dòng)態(tài)規(guī)劃和貪心算法則用來(lái)解決優(yōu)化問(wèn)題。本文就來(lái)看看這些算法的具體實(shí)現(xiàn)吧
    2023-04-04
  • Java設(shè)計(jì)模式之原型模式(Prototype模式)介紹

    Java設(shè)計(jì)模式之原型模式(Prototype模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式(Prototype模式)介紹,本文講解了如何使用原型模式并給出了代碼實(shí)例,需要的朋友可以參考下
    2015-03-03
  • 深入理解Java SpringCloud Ribbon 負(fù)載均衡

    深入理解Java SpringCloud Ribbon 負(fù)載均衡

    Ribbon是一個(gè)客戶端負(fù)載均衡器,它提供了對(duì)HTTP和TCP客戶端的行為的大量控制。這篇文章主要介紹了SpringCloud Ribbon 負(fù)載均衡的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java中的synchronized關(guān)鍵字

    Java中的synchronized關(guān)鍵字

    這篇文章主要介紹了Java中的synchronized關(guān)鍵字,synchronized可以保證方法或代碼塊在運(yùn)行時(shí),同一時(shí)刻只有一個(gè)線程可以進(jìn)入到臨界區(qū)(互斥性),同時(shí)它還保證了共享變量的內(nèi)存可見(jiàn)性,下面我們就來(lái)看看你文章對(duì)synchronized鎖的介紹,需要的朋友也可以參考一下
    2021-12-12
  • SpringSecurity認(rèn)證流程詳解

    SpringSecurity認(rèn)證流程詳解

    這篇文章主要介紹了SpringSecurity認(rèn)證流程詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Spring整合Mybatis的全過(guò)程

    Spring整合Mybatis的全過(guò)程

    這篇文章主要介紹了Spring整合Mybatis的全過(guò)程,包括spring配置文件書(shū)寫(xiě)映射器接口的實(shí)例代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • 如何使用RequestHeaders添加自定義參數(shù)

    如何使用RequestHeaders添加自定義參數(shù)

    這篇文章主要介紹了使用RequestHeaders添加自定義參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-02-02

最新評(píng)論