前言:在设计模式中,对于类来说,一个类应该只负责一类或一项职责。如user类负责与用户相关的登录注册等职责。这就是单一职责原则
那么单一职责原则具体是什么?我们通过对比遵守这一原则前后的程序就能有更清晰的认识!
首先我们不管单一职责原则,先写一个交通交通工具类,这个交通工具类有个run方法描述为在公路上跑。
class Transport{
public void run(String transport){
System.out.println(transport + "在公路上跑...");
}
}
那么我们创建好一个工具类实例时,就可以调用实例的run方法,并往参数中传入各种能在公路上跑的具体交通工具,可能就有人疑问,难道飞机,轮船不算交通工具吗?我往参数里传入这些会怎样?好吧,我们就传进去看一下效果。
public class SinglePonsibility1 {
public static void main(String[] args) {
Vehicle1 vehicle = new Vehicle1();
vehicle.run("汽车");
vehicle.run("飞机");
vehicle.run("轮船");
}
}
运行结果:
这显然不对,我们知道交通工具有很多,然而它却只给所有交通工具提供了一个“在公路上跑”的方法。所以我们应该将交通工具进行分类(我这里分陆,海,空三类),然后每个类负责一类或一项职责。
class Land{
public void run(String land){
System.out.println(land + "在路上跑...");
}
}
class Air{
public void flay(String air){
System.out.println(air + "在天上飞...");
}
}
class Sea{
public void voyage(String sea){
System.out.println(sea + "在水上游...");
}
}
再根据交通工具的类别自由选择创建对象,传入具体工具
public class SinglePonsibility2 {
public static void main(String[] args) {
Land land = new Land();
land.run("汽车");
Air air = new Air();
air.flay("飞机");
Sea sea = new Sea();
sea.voyage("轮船");
}
}
运行结果:
这个结果显然就很合理了!这就是我们的程序在“类”这个级别上遵守“单一职责”原则的好处。可能有人又疑惑,除了在“类”上遵守单一职责原则,还能在哪个级别上遵守?我们接着来看!将原始的工具类中添加各种方法,而是不分类。
class Transport{
public void runLand(String transport){
System.out.println(transport + "在路上跑...");
}
public void runAir(String transport){
System.out.println(transport + "在天上飞...");
}
public void runSea(String transport){
System.out.println(transport + "在水上游...");
}
}
根据交通工具类别选择不同交通方式
public class SinglePonsibility3 {
public static void main(String[] args) {
Transport transport= new transport();
transport.runLand("汽车");
transport.runAir("飞机");
transport.runSea("轮船");
}
}
运行结果:
可以看到我们没有将交通工具分类,而是针对不同类别的交通工具给出不同运行方法,也能实现效果,这就是在“方法”这个级别上遵守“单一职责”原则。
那么我们究竟应该在类上遵守单一职责原则呢?还是应该在方法上遵守?其实两种遵守方式各有优缺点
在类上遵守单一职责原则,我们就需要将大类拆分为数个小类,这样程序稳定性更好,但如果小类数量较多,那么在程运行过程中可能就会创建多个类,创建的类数量多则开销加大!
在方法上遵守单一职责原则,程序运行时不需要创建很多类,但如果一个类中方法过多,则程序将变复杂。
所以在类上遵守单一职责原则还是在方法上遵守单一职责原则,需要我们在实际使用过程中根据情况而定!