java 单一职责原则_设计模式之单一职责原则
對類來說,即一個(gè)類應(yīng)用只負(fù)責(zé)一項(xiàng)職責(zé),如類A負(fù)責(zé)兩個(gè)不同的職責(zé):職責(zé)1,職責(zé)2.當(dāng)職責(zé)1需求變更時(shí),可造成職責(zé)2執(zhí)行錯(cuò)誤,所以需要將類A的粒度分解為A1,A2.
降低類的復(fù)雜度,一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)
提高類的可讀性,可維護(hù)性
降低變更引起的風(fēng)險(xiǎn)
通常情況下,我們應(yīng)該遵守單一職責(zé)原則,只在邏輯足夠簡單,才可以在代碼級別違反單一職責(zé)原則;只有類中方法數(shù)量足夠少時(shí),可以在方法級別保持單一職責(zé)原則即可package www.perwrj.principle.SRP;
/**
* 方案一:不遵守單一職責(zé)原則
* @author wangruijie
*
*/
public class SingleResponsibilityDemo1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("汽車");
vehicle.run("飛機(jī)");
vehicle.run("潛艇");
/*
* 汽車在跑
飛機(jī)在跑
潛艇在跑
*/
}
}
/**
* 交通工具類
* @author wangruijie
*
*/
class Vehicle{
/**
* run方法中,違反單一職責(zé)原則
* 解決方案很簡單,根據(jù)交通工具運(yùn)行的方式不同,分解成不同的類即可
* @param vegicle
*/
public void run(String vegicle) {
System.out.println(vegicle + "在跑");
}
}
package www.perwrj.principle.SRP;
/**
* 方案二:遵守了單一職責(zé)原則
* 但這樣花銷很大,要將類分解,同時(shí)修改客戶端
* 改進(jìn):直接修改Vehicle類
* @author wangruijie
*
*/
public class SingleResponsibilityDemo2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("汽車");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飛機(jī)");
WaterVehicle waterVehicle = new WaterVehicle();
waterVehicle.run("潛艇");
}
}
/**
* 地上跑的
* @author wangruijie
*
*/
class RoadVehicle{
public void run(String vehicle) {
// TODO Auto-generated method stub
System.out.println(vehicle + "地上跑的");
}
}
/**
* 天上飛的
* @author wangruijie
*
*/
class AirVehicle{
public void run(String vehicle) {
// TODO Auto-generated method stub
System.out.println(vehicle + "天上飛的");
}
}
/**
* 在水中跑
* @author wangruijie
*
*/
class WaterVehicle{
public void run(String vehicle) {
// TODO Auto-generated method stub
System.out.println(vehicle + "在水中跑");
}
}
package www.perwrj.principle.SRP;
/**
* 方案三
* 這種修改方法沒有對原來類做大的修改,只是增加了方法。
* 沒有在類級別上遵守單一職責(zé)原則
* 在方法級別上遵守單一職責(zé)原則
* @author wangruijie
*
*/
public class SingleResponsibilityDemo3 {
public static void main(String[] args) {
Vehicle2 vehicle2 = new Vehicle2();
vehicle2.run("汽車");
vehicle2.runAir("飛機(jī)");
vehicle2.runWater("潛艇");
}
}
/**
* 交通工具類
* @author wangruijie
*
*/
class Vehicle2{
/**
*
* @param vegicle
*/
public void run(String vegicle) {
System.out.println(vegicle + "在地上跑");
}
public void runAir(String vegicle) {
System.out.println(vegicle + "在天上跑");
}
public void runWater(String vegicle) {
System.out.println(vegicle + "在水里跑");
}
}
內(nèi)容來源于網(wǎng)絡(luò)如有侵權(quán)請私信刪除
總結(jié)
以上是生活随笔為你收集整理的java 单一职责原则_设计模式之单一职责原则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jpa saveall方法优化
- 下一篇: java面试设计模式