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

单一职责原则

一、为什么这样设计
对于类来说,一个类应该是只负责一项职责。如UserDao这个类管理User的职责,但是它又同时管理Order
的职责,当User这张表需求变更而改变UserDao,可能会导致Order职责执行错误,这也就违反了单一职责
原则。所以我们需要一个OrderDao来管理Order职责需求。
二、单一职责原则注意事项和细节
1. 降低类的复杂度,一个类只负责一项职责。
2. 提高类的可读性,可维护性。
3. 降低变更引起的风险。
4. 通常情况下,我们应当遵守单一职责原则,只要逻辑足够简单,才可以在代码级别违反单一职责原则
也就是说类中的方法数量足够少,可以在方法级别保持单一职责原则。下述代码将会说明	
三、代码展示
需求:不同交通工具应用不同场景
  • 第一种实现
package Single;

public class Test {
    public static void main(String[] args) {
        Vechicle vechicle=new Vechicle();
        vechicle.run("汽车");
        vechicle.run("摩托");
        vechicle.run("飞机");
    }
    //违反单一职责原则,飞机在公路上跑明显不对
    static class Vechicle{
        public void run(String vehicle){
            System.out.println(vehicle+"在公路上运行....");
        }
    }
}

效果图:
在这里插入图片描述
可以看见这种违反单一职责原则,飞机在公路上跑明显不对

  • 第二种实现
package Single;

public class TestTwo {
    public static void main(String[] args) {
        RoadVechicle roadVechicle = new RoadVechicle();
        roadVechicle.run("汽车");

        AirVechicle airVechicle = new AirVechicle();
        airVechicle.run("飞机");

        WaterVechicle waterVechicle = new WaterVechicle();
        waterVechicle.run("轮船");
    }
    
    /**
     * 遵守单一职责原则
     * 修改太大,类分解
     */
    static class RoadVechicle {
        public void run(String vehicle) {
            System.out.println(vehicle + "在公路上运行....");
        }
    }

    static class AirVechicle {
        public void run(String vehicle) {
            System.out.println(vehicle + "在天空运行....");
        }
    }

    static class WaterVechicle {
        public void run(String vehicle) {
            System.out.println(vehicle + "在水里运行....");
        }
    }
}

效果图:在这里插入图片描述
可以看见这是遵守单一职责原则, 但是修改太大,类分解

  • 第三种实现
package Single;

public class TestThree {
    public static void main(String[] args) {
        Vechicle1 vechicle1 = new Vechicle1();
        vechicle1.runRoad("汽车");
        vechicle1.runWater("轮船");
        vechicle1.runAir("飞机");
    }
    /**
     * 一定程度没有遵守单一职责原则,但是在方法层面依然遵守单一职责原则。改动点小,只是增加方法
     */
    static class Vechicle1 {
        public void runRoad(String vehicle) {
            System.out.println(vehicle + "在公路上运行....");
        }

        public void runWater(String vehicle) {
            System.out.println(vehicle + "在水上运行....");
        }

        public void runAir(String vehicle) {
            System.out.println(vehicle + "在天上运行....");
        }
    }
}

效果图:
在这里插入图片描述
可以看见在方法层面依然遵守单一职责原则。改动点小,只是增加方法!
这样简单的类其实就可以在代码级别违反单一职责原则:
也就是说类中的方法数量足够少,可以在方法级别保持单一职责原则。
人是活的,原则是死的。

四、 总结
一个优秀的代码if else应该尽量的少用,要不耦合会非常严重,去看看优秀源码也是如此。可以思考思考使用单一职责原则,用类来划分多分支。

有什么意见可在评论区发言,大家共同进步!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值