七大设计原则-单一职责原则

本文介绍了设计模式中的单一职责原则,强调一个类应仅专注于一个职责。文章通过类A分解为A1和A2的例子,展示了如何降低类的复杂度和提高可维护性。并提供了三个应用实例,探讨在不同场景下如何实施该原则。遵循单一职责原则有助于减少变更风险,提高代码的可读性和可维护性。
摘要由CSDN通过智能技术生成

前言

设计模式相关文章主要来自B站尚硅谷的学习视频的心得 B站视频传送门
设计模式系列文章传送门23种设计模式系列合集
有空会慢慢更新学习心得,相关源码在 Github


基本介绍

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


应用实例

以交通工具案例

方案1

package learn.lhb.design.patterns.principle.singleresponsibility;

/**
 * 单一职责原则 01
 *
 * 方案1
 * 1. 在方式1 的run方法中违反了单一职责原则
 * 2. 解决方案,根据交通工具的不同,分解成不同的类
 * @author 梁鸿斌
 * @date 2020/3/11.
 * @time 22:57
 */
public class SingleResponsibility1 {

    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车");
        vehicle.run("汽车");
        // 飞机应该在天上飞的,但此时在路上跑,违反了单一职责原则
        vehicle.run("飞机");
    }

    /**
     * 交通工具类
     */
    static class Vehicle{
        public void run(String vehicle) {
            System.out.println(vehicle + " 在公路上运行......");
        }
    }
}

方案2

package learn.lhb.design.patterns.principle.singleresponsibility;

/**
 * 单一职责原则
 * 解决 SingleResponsibility1 遗留的问题
 *
 * 方案2
 * 1. 遵守单一职责原则
 * 2. 但是这样做很麻烦,改动很大。所以要将类分解,同时修改客户端
 * 3. 改进: 直接修改Vehicle类
 *
 * @author 梁鸿斌
 * @date 2020/3/11.
 * @time 23:06
 */
public class SingleResponsibility2 {

    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("摩托车");
        roadVehicle.run("汽车");

        WaterVehicle waterVehicle = new WaterVehicle();
        waterVehicle.run("飞机");
    }

    /**
     * 公路交通工具
     */
    static class RoadVehicle {
        public void run(String vehicle) {
            System.out.println(vehicle + " 在公路上运行");
        }
    }

    /**
     * 天上的交通工具
     */
    static class AirVehicle {
        public void run(String vehicle) {
            System.out.println(vehicle + " 在天空上运行");
        }
    }

    /**
     * 水中的交通工具
     */
    static class WaterVehicle {
        public void run(String vehicle) {
            System.out.println(vehicle + " 在水中上运行");
        }
    }

}

方案3

package learn.lhb.design.patterns.principle.singleresponsibility;

/**
 * 单一职责原则.
 * 最终版
 * 方案3的分析
 * 1. 这种修改方法没有对原来的类做大量修改,仅仅增加了方法
 * 2. 这里虽然没有在class类级别遵守单一职责原则,但方法级别上遵守了
 *
 * @author 梁鸿斌
 * @date 2020/3/11.
 * @time 23:17
 */
public class SingleResponsibility3 {

    public static void main(String[] args) {
        Vehicle2 vehicle2 = new Vehicle2();
        vehicle2.run("摩托车");
        vehicle2.run("汽车");
        vehicle2.runWater("轮船");
        vehicle2.runAir("飞机");
    }


}

/**
 * 交通工具类
 */
class Vehicle2{
    public void run(String vehicle) {
        System.out.println(vehicle + " 在公路上运行......");
    }

    public void runAir(String vehicle) {
        System.out.println(vehicle + " 在天空上运行......");
    }

    public void runWater(String vehicle) {
        System.out.println(vehicle + " 在水中上运行......");
    }
}

注意事项

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

有问题欢迎私信/评论指出,谢谢您的观看,希望对您有帮助哦!
https://lianghongbin.blog.csdn.net/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个巨大的怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值