设计模式之单一职责原则

基本介绍:

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

反例:

public class Vehicle {



    public void run (String vehicle){

        System.out.println(vehicle+"在公路上面跑");

    }

}



public class SingleResponsibility1 {



    //方式1 的run方法违反单一职责原则

    //解决的方案非常简单,根据交通工具运行方式不同,分解不同类即可。

    public static void main(String[] args) {

        Vehicle vehicle = new Vehicle();

        vehicle.run("摩托车");

        vehicle.run("汽车");

        vehicle.run("飞机"); //wrong

    }

}



正例:

public class RoadVehicle {



    public void run(String vehicle){

        System.out.println(vehicle+"在公路运行");

    }

}



public class AirVehicle {



    public void run(String vehicle){

        System.out.println(vehicle+"在空中运行");

    }

}



public class WaterVehicle {



    public void run(String vehicle){

        System.out.println(vehicle+"在水中运行");

    }

}



public class SingleResponsibility2 {



    //方式2 遵守了单一职责,但是这样的改动很大,即将类分解,同时修改客户端。

    public static void main(String[] args) {

        RoadVehicle roadVehicle = new RoadVehicle();

        roadVehicle.run("摩托车");

        roadVehicle.run("汽车");



        AirVehicle airVehicle = new AirVehicle();

        airVehicle.run("飞机");



        WaterVehicle waterVehicle = new WaterVehicle();

        waterVehicle.run("潜水艇");

    }

}

改进:

public class Vehicle {



    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+"在水中运行");

    }

}



public class SingleResponsibility3 {



    //方式3 只是增加了方法。虽然没有类这个级别上遵守单一职责原则,但是在方法的级别上,仍然准备单一职责原则的。

    public static void main(String[] args) {

        Vehicle vehicle = new Vehicle();

        vehicle.run("摩托车");

        vehicle.run("汽车");

        vehicle.runAir("飞机");

    }

}

注意细节事项和细节:

  • 降低类的复杂度,一个类只负责一项职责。

  • 提高类的可读性,可维护性

  • 降低变更引起的风险

  • 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级别上违反单一职责原则的;只有类中方法数量足够少,才可以在方法级别保持单一职责原则。

代码地址:https://github.com/GilbertXiao/JavaDesignPatterns

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值