Java设计模式 | 七大原则之单一职责原则

本文介绍了单一职责原则在Java编程中的应用,通过实例展示如何遵循原则以降低类的复杂度,提高可读性和维护性,并讨论了不同方式实现这一原则的优缺点。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、单一职责原则

基本介绍

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

注意事项和细节
  1. 降低类的复杂度,一个类只负责一项职责
  2. 提高类的可读性,可维护性
  3. 降低变更引起的风险
  4. 通常情况下,我们都应该遵守单一职责原则。只有逻辑足够简单,才可以在代码级别违反单一职责原则;只有类中的方法足够少,可在方法级别保持单一职责原则
应用实例
/**
 * Created with IntelliJ IDEA.
 * User: Mingda
 * Time: 2024/2/21 021 22:35
 * File: Singleresponsibility1
 * Description: 单一职责原则,方式1
 */
public class SingleResponsibility1 {

    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("轮船");
        vehicle.run("高铁");
        vehicle.run("汽车");
    }
}

/**
 * 方式1:
 * 1. 在方式1的run方法中,违反了单一职责原则
 * 2. 解决方法:应根据交通工具运行方式的不同,分解成不同的类
 */

// 交通工具类
class Vehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在公路上行驶!!!");
    }
}
/**
 * Created with IntelliJ IDEA.
 * User: Mingda
 * Time: 2024/2/23 14:27
 * File: SingleResponsibility2
 * Description: 单一职责原则,方式2
 */
public class SingleResponsibility2 {

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

        FlightVehicle flightVehicle = new FlightVehicle();
        flightVehicle.run("飞机");

        SeaVehicle seaVehicle = new SeaVehicle();
        seaVehicle.run("轮船");
    }
}

/**
 * 方式2:
 * 1. 遵守单一职责原则
 * 2. 但是这样改动很大,将类分解,需要修改客户端
 * 3. 改进:直接修改Vehicle类,改动很小(相较于方式2)
 */

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

// 飞行交通工具类
class FlightVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在空中飞行");
    }
}

// 海上交通工具类
class SeaVehicle {
    public void run(String vehicle) {
        System.out.println(vehicle + "在海上行驶");
    }
}
/**
 * Created with IntelliJ IDEA.
 * User: Mingda
 * Time: 2024/2/23 14:41
 * File: SingleResponsibility3
 * Description: 单一职责原则,方式3
 */
public class SingleResponsibility3 {

    public static void main(String[] args) {
        Vehicle2 vehicle = new Vehicle2();
        vehicle.runRoad("汽车");
        vehicle.runFlight("飞机");
        vehicle.runSea("轮船");
    }
}

/**
 * 方式3:
 * 1. 将所有方法都放到一个类中,每个方法都实现一个职责
 * 2. 类级别没有遵守单一职责原则,但是方法级别遵守单一职责原则
 */

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

    public void runSea(String vehicle) {
        System.out.println(vehicle + "在海上行驶");
    }

    public void runFlight(String vehicle) {
        System.out.println(vehicle + "在空中行驶");
    }
}

github笔记

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值