单一职责原则 Principle of single responsibility

单一职责原则介绍:

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


以交通工具为案例

方案一:

package com.kittenplus.principle.singleresponsibility;
/*
 * 方案一:没有遵守单一职责原则
 */
public class SingleResponsibility1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车");
        vehicle.run("汽车");
        vehicle.run("飞机");
    }

}

//交通工具类
//1.在方法一的run方法中,违反了单一职责原则
//2.解决方案:根据交通工具运行方式不同,分解成不同的类
class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle+"一辆小汽车在公路上跑");
    }
}

方案二:

package com.kittenplus.principle.singleresponsibility;
/*
 * 方案二:遵守了单一原则,但是改动很大。即要将类分解,同时要修改客户端。
 * 改进:直接修改Vehicle类,改动的代码会比较少。
 */
public class SingleResponsibility2 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        RoadVehicle rv = new RoadVehicle();
        rv.run("摩托车");
        rv.run("汽车");
        AriVehicle av = new AriVehicle();
        av.run("飞机");
        WaterVehicle wv = new WaterVehicle();
        wv.run("轮船");
    }
}
class RoadVehicle {
            public void run(String vehicle) {
            System.out.println(vehicle + "在公路运行");
    }
}
        
class AriVehicle{
            public void run(String vehicle) {
            System.out.println(vehicle + "在公路运行");
    }
}
class WaterVehicle{
            public void run(String vehicle) {
            System.out.println(vehicle + "在水里运行");
            }
}

方案三:

package com.kittenplus.principle.singleresponsibility;
/*
 *方式三:
 *1.这种修改的方法没有对原来的类进行较大的改动,只是增加了方法 
 *2.这里虽然没有在类这个级别上遵守单一职责原则,但是在方法级别上,仍然是遵守单一职责。
 */
public class SingleResponsibility3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Vehicle2 v2 = new Vehicle2();
        v2.Roadrun("马达飞");
        v2.Airrun("精英飞机");
        v2.Waterrun("水中游");
    }
}

class Vehicle2 {
    public void Roadrun(String vehicle) {
        System.out.println(vehicle+" 一辆小汽车在公路上跑");
    }
    public void Airrun(String vehicle) {
        System.out.println(vehicle+" 飞机在公路上飞");
    }
    public void Waterrun(String vehicle) {
        System.out.println(vehicle+" 轮船在水中跑");
    }
}

单一职责原则注意事项和细节

1) 降低类的复杂度,一个类只负责一项职责。
2) 提高类的可读性,可维护性
3) 降低变更引起的风险
4) 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违
反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则

猜你喜欢

转载自www.cnblogs.com/thinkAboutMore/p/12404607.html