java面向对象的七大设计原则之单一职责原则

一.简介

 简单来说,单一职责原则表示的就是一个类只负责一项职责

比如,类A负责两个不同的职责。当职责1需求变更而改变A类时,可能会对职责2产生影响,为了避免此种情况,我们就要将类A的的粒度分解成A1、A2,此时也就是单一职责原则所要表达的事情。

二. 代码示例

2.1 错误代码示例

此时的A类不满足单一职责原则而引发的问题

package com.principle;

/**
 * @author inconspicuousy
 */
public class SingleResponsibility {
    public static void main(String[] args) {
        // 类A涉及职责不清楚, 需要改进
        A a = new A();
        a.run("小汽车"); // 小汽车在陆地上运行
        a.run("飞机"); // 飞机在陆地上运行
    }
}

// 交通工具类
interface Vehicle {
    // 交通工具运行
    void run(String name);
}

class A implements Vehicle {
    // 这里A实现Vehicle接口, 但是直接就断定所有的交通工具都是在陆地上运行, 职责不清楚
    @Override
    public void run(String name) {
        System.out.println(name + "在陆地上运行");
    }
}


2.2 优化后代码示例

2.2.1 类图结构

单一职责原则优化示例图

2.2.2 代码示例

package com.principle.single.improve;

/**
 * 单一职责原则改善
 * @author inconspicuousy
 */
public class SingleResponsibilityImprove {
    public static void main(String[] args) {

        // 就是将原先A类分成粒度更细的RoadVehicle/AirVehicle
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("小汽车");

        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飞机");
    }
}

interface Vehicle {
    void run(String name);
}

// 陆地工具
class RoadVehicle implements Vehicle {
    @Override
    public void run(String name) {
        System.out.println(name + "在陆地上跑");
    }
}

// 空中工具
class AirVehicle implements Vehicle {
    @Override
    public void run(String name) {
        System.out.println(name + "在天空上飞");
    }
}

三. 优点

  1. 一个类只负责一项职责,降低类的复杂度。
  2. 提高类的可读性和可维护性。当我们针对某一个类进行功能扩展时不会对其他类产生影响。

注意: 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则。

转载自:https://blog.csdn.net/qq844579582/article/details/109027342

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值