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

    前言: 这些都是老师布置的作业得写,顺便记录下

    单一职责原则官方解释: 对类来说的,即一个类应该只负责一项职责

    理解: 如果类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 B 和 C,这样 B 就专门解决职责 1, C 就专门解决职责 2

    如下面这个例子就没有体现单一职责原则,可以发现Vehicle这个类既去 让 "汽车" 在路上运行,同时也让 "飞机" 在路上运行,明显就错误了!

    public class demo1 {
    	public static void main(String[] args) {
    		Vehicle v = new Vehicle();
    
    		v.run("汽车");
    		v.run("飞机");
    		
    	}	
    }
    
    class Vehicle{
    	public void run(String vehicle) {
    		System.out.println(vehicle + "正在路上运行!");
    	}
    	
    }
    

    再看下面这个例子,我们用两个类去定义各自去实现 "飞机" "汽车"的 run 方法,这样子就不会出现类似的错误了!

    public class demo2 {
    	public static void main(String[] args) {
    		RoadVehicle v1 = new RoadVehicle();
    		AirVehicle  v2 = new AirVehicle();
    		
    		v1.run("汽车");
    		v2.run("飞机");
    		
    	}	
    }
    
    class RoadVehicle{
    	public void run(String vehicle) {
    		System.out.println(vehicle + "正在路上运行!");
    	}
    	
    }
    
    class AirVehicle{
    	public void run(String vehicle) {
    		System.out.println(vehicle + "正在天上运行!");
    	}
    	
    }
    

    总结: 单一职责的原则注意事项和细节

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

    2. 提高类的可读性,可维护性

    3. 降低变更引起的风险

    个人理解:其实还是高内聚 低耦合 !

    但是再思考下,如果工作量少的话,这样子去实现会特别的臃肿,大材小用了,那么当工作量少的话还可以如下去实现,把 类 降一级成为 方法

    这里虽然没有在类的级别上遵守单一职责原则,但是在方法的级别上,仍然是遵守单一职责

    public class demo3 {
    	public static void main(String[] args) {
    		Vehicle v = new Vehicle();
    
    		v.runRoad("汽车");
    		v.runWater("飞机");
    		
    	}	
    }
    
    class Vehicle{
    	public void runRoad(String vehicle) {
    		System.out.println(vehicle + "正在路上运行!");
    	}
    	
    	public void runWater(String vehicle) {
    		System.out.println(vehicle + "正在天上运行!");
    	}
    }
    

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

  • 相关阅读:
    RN起步常见问题
    spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题
    vue 使用axios 跨域请求数据的问题
    vue 使用axios 跨域请求数据的问题
    vue 集成 axios 发送post请求 payload导致后台无法接收到数据问题
    vue-cli 脚手架目录结构说明
    vue-cli 前端开发,后台接口跨域代理调试问题
    ios video标签部分mp4文件无法播放的问题
    青岛旅游攻略
    iOS8使用TestFlight进行内部测试功能尝鲜
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12517540.html
Copyright © 2011-2022 走看看