java 单一职责原则_JAVA设计模式七大原则之:(三)单一职责原则

一、定义

单一职责原则(Single Responsibility Principle, SRP):一个软件实体(模块、类、方法)只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则

二、优点

1.降低模块、类或方法的复杂度。

2.提高类可读性,系统的可维护性。

3.降低变更引起的风险。

三、示例

/**

* Create By Ke Shuiqiang 2020/3/5 23:31

* 小明同学的周末

*/

public class XiaoMing {

public void activity(String activity){

if("学习".equals(activity)){

System.out.println("小明周末在家学习!");

}else{

System.out.println("小明周末出去运动了!");

}

}

}

public class Test {

public static void main(String[] args) {

XiaoMing xm = new XiaoMing();

xm.activity("学习");

System.out.println("------");

xm.activity("运动");

}

}

小明周末在家学习!

------

小明周末出去运动了!

在这个示例中,一个方法包含了两个职责运动和学习,很明显两种职责的业务逻辑是不一样的,必须要修改代码。而修改代码逻辑势必会相互影响容易造成不可控的风险。我们对职责进行分离解耦,来看代码:

//学习

public void study(String study){

System.out.println("小明周末在家" + study + "!");

}

//运动

public void motion(String motion){

System.out.println("小明周末出去" + motion + "!");

}

public class Test {

public static void main(String\[\] args) {

XiaoMing xm = new XiaoMing();

xm.study("学习");

System.out.println("--------------");

xm.motion("运动");

}

}

小明周末在家学习!

--------------

小明周末出去运动!

修改后的代码由原先的activity()方法解耦成两个职责单一的方法,每个方法只有一种可能让它产生变化,这是方法层面的单一原则,我们在看看类方面。

public class Study {

//java学习

public void javaStudy(String name){

System.out.println("在家学习" \+ name);

}

//php学习

public void phpStudy(String name){

System.out.println("在家学习" \+ name);

}

//练习吉他

public void guitarStudy(String name){

System.out.println("在家练习" \+ name);

}

//练习唱歌

public void singStudy(String name){

System.out.println("在家练习" \+ name);

}

}

在上面的示例中我们看到Study类中包含了四个方法,虽然这四个方法都是学习相关的,但是细分的话我们能发现它们的职责还是不那么单一。学习JAVA和PHP,从性质上说它们两个是知识方面的,而练习吉他和唱歌,更偏向于技能和兴趣爱好方面。所以我们需要把它解耦成两个职责单一的类。

/**

* Create By Ke Shuiqiang 2020/3/6 15:42

* 知识学习

*/

public class KnowledgeSudy {

//java学习

public void javaStudy(String name){

System.out.println("在家学习" + name);

}

//php学习

public void phpStudy(String name){

System.out.println("在家学习" + name);

}

}

/**

* Create By Ke Shuiqiang 2020/3/6 15:44

* 兴趣爱好学习

*/

public class InterestStudy {

//练习吉他

public void guitarStudy(String name){

System.out.println("在家练习" + name);

}

//练习唱歌

public void singStudy(String name){

System.out.println("在家练习" + name);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值