java设计模式-单一职责原则

单一职责原则(SRP:Single responsibility principle)

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

简单定义:

一个对象应该只包含单一的职责,并且该职责完全封装在一个类中

另一种定义

就一个类而言,就是引起它变化的因素只有一个

单一职责原则分析
  • 一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性越小,就是一个类的职责承担太多,这些职责耦合在一起,一个职责发生改变,其他的就会发生改变
  • 类的职责主要包括两个方面:数据职责和方法职责,数据职责通过其属性,行为职责通过其方法来体现
  • 单一职责原则是实现高内聚,低耦合
代码理解
public class Vehicle {
	public void run(String VehicleName) {
		System.out.println(VehicleName+"在公路上运行");
	}
}
public class SimpleResponsibility {
	public static void main(String[] args) {
			Vehicle vehicle = new Vehicle();
			vehicle.run("小汽车");
			vehicle.run("飞机");
			vehicle.run("自行车");
			vehicle.run("轮船");
	}
}
在这里代码就会出现逻辑性的问题,飞机是在天空中飞行的,轮船是在水中行驶的,交通工具有很多种,在不同的地方行驶,就违反了单一职责原则

就不符合单一职责原则

按类拆分
class RoadVehicle{
	public void run(String VehicleName) {
		System.out.println(VehicleName+"在公路上运行");
	}
}
class WaterVehicle{
	public void run(String VehicleName) {
		System.out.println(VehicleName+"在水上上运行");
	}
}
class AirVehicle{
	public void run(String VehicleName) {
		System.out.println(VehicleName+"在天空上运行");
	}
}
public class SimpleResponsibility {
	public static void main(String[] args) {
		RoadVehicle carVehicle = new RoadVehicle();
		carVehicle.run("小汽车");
		carVehicle.run("自行车");
		System.out.println("===========");
		WaterVehicle vehicle2 = new WaterVehicle();
		vehicle2.run("轮船");
		System.out.println("===========");
		AirVehicle airplane = new AirVehicle();
		airplane.run("飞机");
	}
}

但是这样改动就比较大
按方法拆分
public class Vehicle2 {
	//按方法拆分
	//虽然在类级别没有遵守单一职责原则,但是在方法上是遵守单一职责原则
	public void roadRun(String vechileName) {
		System.out.println(vechileName+"在公路上运行");
	}
	public void waterRun(String vechileName) {
		System.out.println(vechileName+"在水路上运行");
	}
	public void airRun(String vechileName) {
		System.out.println(vechileName+"在空中上运行");
	}
	
}

public class SimpleResponsibility {
	public static void main(String[] args) {
		Vehicle2 Vehicle2 = new Vehicle2();
		Vehicle2.airRun("飞机");
		System.out.println("============");
		Vehicle2.waterRun("轮船");
		System.out.println("===========");
		Vehicle2.roadRun("小汽车");
	}
}
虽然在类级别没有遵守单一职责原则,但是在方法上是遵守单一职责原则,只有类中方法数量足够少,可以在方法级别保持单一职责。
上面的例子不明显,看看下面的图

在这里插入图片描述

使用单一职责原则后图:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值