单一职责原则

1.设计模式七大原则

首先,请思考一个问题:我们根据什么原则来设计设计模式?

  • 单一职责原则
  • 接口隔离原则
  • 依赖倒置原则
  • 里氏替换原则
  • 开闭原则
  • 迪米特法则
  • 合成复用原则

2. 单一职责原则

什么是单一职责原则?

  • 一个类只负责一项职责

2.1 案例

  • 方案一:
/**
 * 单一职责原则
 */
public class SingleResponsOne {
    public static void main(String[] args) {
       Vehicle vehicle =new Vehicle();
       vehicle.run("汽车");
       vehicle.run("轮船");
    }

}

class Vehicle {
    public void run(String vehicleName) {
        System.out.println(vehicleName + "在公路上运行");
    }
}

现在请我们思考以下两个问题:

  1. 问题一:轮船是在公路上运行吗? 原因:Vehicle类负责了多个职责(汽车、轮船、飞机等),违反了单一职责
  2. 问题二:如果我要限制飞机在大雪天不能飞行呢? 原因:需要在run方法中做判断,汽车、轮船、飞机高度耦合在一起
  • .方案二:
public class SingleResponsTwo {
    public static void main(String[] args) {
        RoadVehicle roadVehicle =new RoadVehicle();
        roadVehicle.run("汽车");
        AirVehicle airVehicle =new AirVehicle();
        airVehicle.run("飞机");
        WaterVehicle waterVehicle =new WaterVehicle();
        waterVehicle.run("轮船");
    }
}
class RoadVehicle {
    public void run(String vehicleName) {
        System.out.println(vehicleName + "在公路上运行");
    }
}
class AirVehicle {
    public void run(String vehicleName) {
        System.out.println(vehicleName + "在空中飞行");
    }
}
class WaterVehicle {
    public void run(String vehicleName) {
        System.out.println(vehicleName + "在水中航行");
    }
}

问题:上面的代码虽然符合了单一职责原则,但是开销很大

设计原则是死的,人是活的。虽然单一职责原则定义一个类只负责一个职责,但我们可以将职责下沉到方法级别(方案三)

  • 方案三1
    一个具有注脚的文本。
public class SingleResponsThree {
    public static void main(String[] args) {
        Vehicle2 v2 =new Vehicle2();
        v2.runRoad("汽车");
        v2.runAir("飞机");
        v2.runWater("轮船");
    }
}
class Vehicle2 {
    public void runRoad(String vehicleName) {
        System.out.println(vehicleName + "在公路上运行");
    }
    public void runAir(String vehicleName) {
        System.out.println(vehicleName + "在空中飞行");
    }
    public void runWater(String vehicleName) {
        System.out.println(vehicleName + "在水中航行");
    }
}

2.2 总结

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

  1. 推荐使用方案,将职责下沉到方法级。(注意:不是所有情况都要下沉职责,只有当类的方法很少时,才这么做) ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值