zoukankan      html  css  js  c++  java
  • 单一职责原则

    单一职责原则

    1.基本介绍

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

    2.应用实例

    以交通工具案例说明

    1. 方案1
    public class SingleResponsibility1{
    	public static void main(String[] args){
          Vehicle vehicle = new Vehicle();
          vehilcle.run("摩托车");
          vehicel.run("汽车");
          vehicel.run("飞机");
    	}
    }
    
    class Vehicle{
        public void run(String vehicle){
        	System.out.println(vehicle+"在公路上行驶...")
        }
    }
    
    

    缺点:违反了单一职责原则
    改进:根据交通工具运行方法不同,分解成不同的类。

    2)方案二

    public class SingleResponsibility2{
      public static void main(String[] args){
          RoadVehicle roadVehicle = new RoadVehicle();
          roadVehicle.run("摩托车");
          roadVehicle.run("汽车");
    
          AirVehicle airVehicle = new Airvehicle();
          airVehicle.run("飞机");
      }
    }
    
    class RoadVehicle{
        public void run(String vehicle){
        	System.out.println(vehicle+"公路上运行");
        }
    }
    
    class AirVehicle{
        public void run(String vehicle){
        	System.out.println(vehicle+"天空运行");
        }
    }
    
    

    分析:虽然遵守了单一职责原则。但改动很大
    改进:直接修改Vehicle类,让方法实现单一原则。

    3)方案三

    public class SingleResponsibility3{
      public static void main(String[] args){
          Vehicle2 vehicle2 = new Vehicle2();
          vehicle2.run("汽车");
          vehicle2.runWater("轮船");
          vehicle2.runAir("飞机");
      }
    }
    class Vehicle2{
        public void run(String vehicle){
        	System.out.println(vehicle+"在公路上运行");
        }
        public void runAir(String vehicle){
        	System.out.println(vehicle+"在天空上运行"):
        }
    }
    

    分析:这种修改方法没有对原来的类做大的修改,只是增加方法。
    虽然没有在类级别上遵守单一职责原则,但是在方法级别上遵守单一职责。

    3.单一职责原则注意事项和细节

    1)降低类的复杂度,一个类只负责一项职责。
    2)提高类的可读性,可维护性
    3)降低变更引起的风险
    4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。

  • 相关阅读:
    SQL Server索引进阶:第十二级,创建,修改,删除
    SQL Server索引进阶第十一篇:索引碎片分析与解决
    Object.create()和new object()和{}的区别
    vue 前后端分离nginx部署
    实现组件props双向绑定解决方案
    prop不同数据类型设置默认值
    vue + element ui 阻止表单输入框回车刷新页面
    Vue.js中 watch(深度监听)的最易懂的解释
    vue-resource和axios区别
    JS中 reduce() 的用法
  • 原文地址:https://www.cnblogs.com/chao-zjj/p/11247846.html
Copyright © 2011-2022 走看看