Java設(shè)計(jì)模式中的單一責(zé)任原則詳解
1、基本介紹
對(duì)類來說,即一個(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
2、應(yīng)用實(shí)例
2.1未遵循單一責(zé)任原則
在方式1的run方法中,飛機(jī)在公路上運(yùn)行。明顯違反了單一責(zé)任原則
package com.weirdo.principle.singleResponsibility;
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("摩托車");
vehicle.run("汽車");
vehicle.run("飛機(jī)");
}
//交通工具類
static class Vehicle{
public void run(String vehicle){
System.out.println(vehicle+"在公路上運(yùn)行...");
}
}
}
2.2遵循單一責(zé)任原則(類級(jí))
遵守單一責(zé)任原則。
但是這樣做改動(dòng)很大,即將類分寫,同時(shí)需要修改客戶端。
package com.weirdo.singleResponsibility;
public class SingleResponsibility2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("摩托車");
roadVehicle.run("汽車");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飛機(jī)");
}
static class RoadVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "在公路上運(yùn)行...");
}
}
static class AirVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "在天上上運(yùn)行...");
}
}
}
2.3遵循單一責(zé)任原則(方法級(jí))
這種修改方法沒有對(duì)原來的類做大的修改,只是增加方法。
然沒有在類這個(gè)級(jí)別上遵守單一責(zé)任原則,但是在方法級(jí)別上仍然是遵守單一責(zé)任
package com.weirdo.singleResponsibility;
public class SingleResponsibility3 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.runAir("飛機(jī)");
vehicle.runRoad("汽車");
vehicle.runWater("航母");
}
static class Vehicle {
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 + "在水里運(yùn)行...");
}
}
}
3、注意事項(xiàng)
- 降低類的復(fù)雜都,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)
- 提高類的可讀性,可維護(hù)性
- 通常情況下,應(yīng)該遵守單一責(zé)任原則。只有邏輯足夠簡單,才可以在代碼級(jí)違反單一責(zé)任原則:只有類中方法數(shù)量足夠少??梢栽诜椒?jí)別保持單一責(zé)任原則
到此這篇關(guān)于Java設(shè)計(jì)模式中的單一責(zé)任原則詳解的文章就介紹到這了,更多相關(guān)Java單一責(zé)任原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RxJava中map和flatMap的用法區(qū)別源碼解析
這篇文章主要為大家介紹了RxJava中map和flatMap的用法區(qū)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程(推薦)
這篇文章主要介紹了JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Servlet+JavaBean+JSP打造Java Web注冊與登錄功能
比作MVC的話,控制器部分采用Servlet來實(shí)現(xiàn),模型部分采用JavaBean來實(shí)現(xiàn),而大部分的視圖采用Jsp頁面來實(shí)現(xiàn),接下來我們就來詳細(xì)看看如何用Servlet+JavaBean+JSP打造Java Web注冊與登錄功能2016-05-05
java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段
這篇文章主要為大家詳細(xì)介紹了java web將數(shù)據(jù)導(dǎo)出為pdf格式文件代碼片段,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
SpringBoot項(xiàng)目打包war包時(shí)無法運(yùn)行問題的解決方式
在開發(fā)工程中,使用啟動(dòng)類啟動(dòng)能夠正常啟動(dòng)并測試,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打包war包時(shí)無法運(yùn)行問題的解決方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Java運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理解析
這篇文章主要介紹了Java運(yùn)行時(shí)數(shù)據(jù)區(qū)劃分原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

