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)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。

  • 相关阅读:
    三种钱是花的越多,赚的越多
    程序员除去繁华,你的匠心何在?
    科目三考试
    药房托管
    文章标题
    【cocos2d-x 3.7 飞机大战】 决战南海I (八) 背景移动
    Android开发时经经常使用的LogUtil
    仿支付宝/微信的password输入框效果GridPasswordView解析
    hdoj 1518 Square 【dfs】
    mysql配置文件夹错误:在安装mysql 5.6.19 时运行cmake命令是出现CMake Error: The source directory does not appear to contai
  • 原文地址:https://www.cnblogs.com/chao-zjj/p/11247846.html
Copyright © 2011-2022 走看看