DesignPattern系列__01SingletonResponsibility
2024-09-01 04:14:39
单一职责原则
单一职责原则:一个类应该只有一个原因引起改变,即一个类应该只负责一个业务逻辑。
问题由来:类T负责t1, t2两个职责,当因为t1j对类T修改的时候,可能导致类T出现问题而影响职责t2。
解决方案:遵循单一职责原则,将类T进行改写,确保一个类负责一个职责。
demo:
有一个类Animal,具有方法breath功能,一般的思路是这样子设计的:
class Animal {
public void breathe(String animal) {
System.out.println(animal + "呼吸空气");
}
}
当你创建一个Animal实例后,就可以调用breathe方法了。
public class SingletonResponsibility {
public static void main(String[] args) {
Animal animal = new Animal();
animal.breathe("鸟类");
animal.breathe("狮子");
//逻辑错误:鱼类应该呼吸水
animal.breathe("鱼类");
}
}
我们发现,当调用breathe方法时,若是传入鱼类,输出结果不会发生变化。但是,这在逻辑上面是错误的。
##################
改进思路1:在breathe方法中进行判断
通过判断,区别对待:若是鱼类,则输出“呼吸水”;其他的动物,输出“呼吸空气”;
这样做的好处是:能够爆出业务逻辑的正确;但是违反了单一职责原则:类Animal除了负责正常的业务罗杰,还需要进行类型判断。
class Animal1 {
public void breathe(String animal) {
// 改进: 在方法中对animal进行判断,如果是鱼类,则显示呼吸水
// 弊端: 没有尊新单一职责原则,该方法除了需要执行正常的业务逻辑外,
// 还需要对animal进行判断。
if ("鱼类".equals(animal)) {
System.out.println(animal + "呼吸水");
} else {
System.out.println(animal + "呼吸空气");
}
}
}
改进思路2:对类、方法进行拆分
为了保证遵循单一职责原则,我们可以将类、方法进行拆分,并且保证了也为逻辑的正确。
class Animal2 {
// 改进: 新增一个呼吸水的方法,这种方式虽然在类级别违反了单一职责原则,
// 但是在方法上遵循了。
// 注意: 单一职责原则在实际使用中,指的是遵循单一的业务逻辑。
public void breathe(String animal) {
System.out.println(animal + "呼吸空气");
}
public void breatheWater(String animal) {
System.out.println(animal + "呼吸水");
}
}
单一职责的优点:
1.降低类的负责度,一个类只对一个业务逻辑负责;
2.提高项目的可读性,可维护性;
3.j降低项目变更的风险;
注意事项:
在项目中,我们应该尽量遵循单一职责原则,但是,当业务逻辑较简单时,可以违背。
最新文章
- 分享一个漂亮的ASP.NET MVC界面框架
- php读取指定结束指针文件内容
- cojs 疯狂的字符串 题解报告
- 多个MapReduce作业相互依赖时,使用JobControl进行管理
- debian7 更换GCC版本
- 车的UML图
- Android4.0 声卡配置-高通msm8916移植
- MIB Browser如何导入已编译的mib
- React Native学习(九)—— 使用Flexbox布局
- 为什么qt成为c++界面编程的第一选择
- [物理学与PDEs]第5章习题6 各向同性材料时强椭圆性条件的等价条件
- BZOJ3295 [Cqoi2011]动态逆序对 分治 树状数组
- jquery 手机获取验证码计时
- 全卷积神经网络FCN
- 使用R语言-计算均值,方差等
- mysql--------char 和 varchar 的区别
- (转)使用UTL_SMTP包发送邮件
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- css常用属性初总结:伪元素和伪元素
- 20-list简单使用: