java 单一职责原则_设计模式之单一职责原则

本文探讨了单一职责原则在软件设计中的重要性,通过比较三种代码实现方式,展示了如何避免职责交错导致的问题。方案一演示了不遵守原则的后果,方案二则遵循原则但成本较大,而方案三提供了一种在方法层面保持原则的折衷选择。
摘要由CSDN通过智能技术生成

对类来说,即一个类应用只负责一项职责,如类A负责两个不同的职责:职责1,职责2.当职责1需求变更时,可造成职责2执行错误,所以需要将类A的粒度分解为A1,A2.

降低类的复杂度,一个类只负责一项职责

提高类的可读性,可维护性

降低变更引起的风险

通常情况下,我们应该遵守单一职责原则,只在逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中方法数量足够少时,可以在方法级别保持单一职责原则即可package www.perwrj.principle.SRP;

/**

* 方案一:不遵守单一职责原则

* @author wangruijie

*

*/

public class SingleResponsibilityDemo1 {

public static void main(String[] args) {

Vehicle vehicle = new Vehicle();

vehicle.run("汽车");

vehicle.run("飞机");

vehicle.run("潜艇");

/*

* 汽车在跑

飞机在跑

潜艇在跑

*/

}

}

/**

* 交通工具类

* @author wangruijie

*

*/

class Vehicle{

/**

* run方法中,违反单一职责原则

* 解决方案很简单,根据交通工具运行的方式不同,分解成不同的类即可

* @param vegicle

*/

public void run(String vegicle) {

System.out.println(vegicle + "在跑");

}

}

package www.perwrj.principle.SRP;

/**

* 方案二:遵守了单一职责原则

* 但这样花销很大,要将类分解,同时修改客户端

* 改进:直接修改Vehicle类

* @author wangruijie

*

*/

public class SingleResponsibilityDemo2 {

public static void main(String[] args) {

RoadVehicle roadVehicle = new RoadVehicle();

roadVehicle.run("汽车");

AirVehicle airVehicle = new AirVehicle();

airVehicle.run("飞机");

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;

/**

* 方案三

* 这种修改方法没有对原来类做大的修改,只是增加了方法。

* 没有在类级别上遵守单一职责原则

* 在方法级别上遵守单一职责原则

* @author wangruijie

*

*/

public class SingleResponsibilityDemo3 {

public static void main(String[] args) {

Vehicle2 vehicle2 = new Vehicle2();

vehicle2.run("汽车");

vehicle2.runAir("飞机");

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 + "在水里跑");

}

}

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值