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

Java设计模式 | 七大原则之单一职责原则_第1张图片

一、单一职责原则

基本介绍

对类来说,一个类应该只负责一项原则,如类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笔记

你可能感兴趣的:(Java设计模式,java,设计模式,单一职责原则)