GoF23-单一职责原则

单一职责原则

单一职责原则概述

对类来说的,即一个类应该只负责一项职责。如类Cola负责两个不同职责:职责1:生产可乐,职责2:销售可乐

当职责1:生产可乐需求变更而改变类Cola时,可能造成职责2:销售可乐执行错误,所以需要将类Cola的粒度分解为:类ProductionCola,类SaleCola

单一职责原则:各司其职

单一职责原则实际应用

应用背景
描绘出一些人正在使用的交通工具的情况
解决方法一
package com.tan.principle.singleresponsibility;

/*
方案一:
    问题:在交通工具类中的drive方法,违反了单一职责原则
    解决办法:根据交通工具运行方法的不同,分解成不同的类
 */
public class SingleResponsibilityDemo1 {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.drive("汽车");
        vehicle.drive("自行车");
        vehicle.drive("飞机");
    }
}

/*
交通工具类
 */
class Vehicle {
    public void drive(String vihicle) {
        System.out.println("正在运行:" + vihicle);
    }
}
解决方法二
package com.tan.principle.singleresponsibility;

/*
方案二:
    遵守了单一职责原则,但是改动较大:将类分解,同时修改了客户端
    优化:方案三直接修改Vehicle类,使改动的代码变少
 */
public class SingleResponsibilityDemo2 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.drive("汽车");
        roadVehicle.drive("自行车");

        AirVehicle airVehicle = new AirVehicle();
        airVehicle.drive("飞机");

    }
}


class RoadVehicle {
    public void drive(String vihicle) {
        System.out.println("正在公路上运行:" + vihicle);
    }
}

class WaterVehicle {
    public void drive(String vihicle) {
        System.out.println("正在水里运行:" + vihicle);
    }
}

class AirVehicle {
    public void drive(String vihicle) {
        System.out.println("正在天空上运行:" + vihicle);
    }
}

解决方法三

package com.tan.principle.singleresponsibility;

/*
方案三:
    对原来的类没有做较大的修改,只是增添了方法的个数

    虽然没有在类这个细粒度上遵守单一职责原则,但是在方法这一细粒度上遵守了单一职责原则
 */
public class SingleResponsibilityDemo3 {
    public static void main(String[] args) {
        Vehicle2 vehicle2 = new Vehicle2();
        vehicle2.driveRoad("汽车");
        vehicle2.driveAir("飞机");
        vehicle2.driveWater("帆船");
    }
}

class Vehicle2 {
    public void driveRoad(String vihicle) {
        System.out.println("正在公路上运行:" + vihicle);
    }

    public void driveWater(String vihicle) {
        System.out.println("正在水里运行:" + vihicle);
    }

    public void driveAir(String vihicle) {
        System.out.println("正在天空上运行:" + vihicle);
    }


}

单一职责原则注意事项

单一职责原则注意事项:
    1)降低类的复杂度,一个类只负责一项职责
    
    2)提高类的可读性,可维护性
    
    3)降低变更引起的风险
    
    4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单才可以在代码违
    反单一职责原则:只有类中方法数量足够少的时候,才可以在方法这一细粒度保持单一职责原则,在类这一细粒度违反单一职责原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值