01单一职责原则

基本介绍

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

实例演示

我们建立一个交通(Vehicle)类,并交通工具的运行方法

方式一

public class SingleResponsibility1 {
    public static void main(String[] args) {
        Vehicle vehicle = new Vehicle();
        vehicle.run("摩托车");
        vehicle.run("汽车");
        vehicle.run("飞机");
    }
}

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

运行结果:
/*
摩托车在公路上运行
汽车在公路上运行
飞机在公路上运行			// 明显不正确
*/
分析方式一

在方式一中的 run 方法中,违反了单一职责原则
解决方案,根据交通工具运行方法不同,分解成不同类即可


方式二

public class SingleResponsibility2 {
    public static void main(String[] args) {
        RoadVehicle roadVehicle = new RoadVehicle();
        roadVehicle.run("car");
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("plan");
    }
}

class RoadVehicle{
    public void run(String vehicle){
        System.out.println(vehicle + " in road running");
    }
}

class AirVehicle{
    public void run(String vehicle){
        System.out.println(vehicle + " in fly sky");
    }
}

运行结果:
/*
car in road running
plan in fly sky
*/
分析方式二
  1. 遵守单一职责原则
  2. 但是这样做的改动很大,即将类分解,同时修改客户端
  3. 改进:直接修改 Vehicle 类,改动代码会比较少

方式三

public class SingleResponsibility3 {
    public static void main(String[] args) {
        Vehicle2 vehicle2 = new Vehicle2();
        vehicle2.runRoad("car");
        vehicle2.runSea("fish");
        vehicle2.runSky("plane");
    }
}

class Vehicle2{
    public void runSky(String vehicle){
        System.out.println(vehicle + " in sky");
    }

    public void runRoad(String vehicle){
        System.out.println(vehicle + " in road");
    }

    public void runSea(String vehicle){
        System.out.println(vehicle + " in Sea");
    }
}

运行结果:
/*
car in road
fish in Sea
plane in sky
*/
分析方式三
  1. 这种修改方法没有对原来的类做大的修改,只是增加方法
  2. 这里虽然没有在类这一级别上遵守单一职责原则,但是在方法上仍然是遵守单一职责原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值