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

  • 相关阅读:
    Android5.0之Activity的转场动画
    Android5.0之CardView的使用
    Android5.0之CoordinatorLayout的使用
    Android5.0之NavigationView的使用
    Android开发之Bitmap二次采样
    android自定义View之NotePad出鞘记
    android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检索
    android自定义View之钟表诞生记
    Spring经典高频面试题,原来是长这个样子
    Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
  • 原文地址:https://www.cnblogs.com/chao-zjj/p/11247846.html
Copyright © 2011-2022 走看看