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

    官方定义

    单一职责原则(Single Responsibility Pronciple,SRP),有且仅有一个原因引起类的变化

    顾名思义:一个类值负责一项职责。如类A负责连个不同的职责:职责1和职责2,当职责1需求变更二改变A时,可能会造成职责2执行错误,所以需要将类A的粒度分解为A1和A2

    package danyisheji;
    
    public class Animal {
        public static void main(String[] args) {
            new ForestAnimal().run("狮子");
            new AirAnimal().fly("老鹰");
        }
    
    
    }
    
    class ForestAnimal {
        public void run(String animal) {
            System.out.println(animal + "在森林中愉快地奔跑");
        }
    }
    
    class AirAnimal {
        public void fly(String animal) {
            System.out.println(animal + "在天空中愉快地飞翔");
        }
    }
    
    

    优势: 符合了业务逻辑,符合翻译职责原理
    劣势:改动幅度大,不光是要拆分类,客户端的代码也要进行大幅度的改动

    解决方法二:

    直接在原有类的基础上进行修改

    package danyisheji;
    
    public class Animal {
        public static void main(String[] args) {
            new animal().runForest("狮子");
            new animal().fly("老鹰");
        }
    
    
    }
    
    class  animal{
        public void runForest(String animal){
            System.out.println(animal + "在森林中愉快地奔跑");
        }
        public void fly(String animal){
            System.out.println(animal + "在天空中愉快地飞翔");
        }
    }
    

    优势:改动幅度小,包括客户端,完成了业务逻辑
    劣势:是否违反了单一职责原则?(方法级别的遵守)

    单一职责原则:各司其职

    注意事项和原则

    • 降低类的复杂度,一个类只负责一项职责(一个类职责少了,相应的复杂度低了)
    • 提高类的可读性以及课维护性(相应的复杂度降低了,代码量就会减少,可读性也就提高了,课维护性自然也就提高了)
    • 降低变更引起的风险(一个类职责越多,变更的可能性就会越大,变化带来的风险也就会越大)
    • 通常情况下,我们应该遵守单一职责原则(只有逻辑足够简单,才可以在代码中违反单一职责原则)

    如何遵守单一执行原则

    其实就是合理的职责分解,从业务出发,从需求出发,识别出同一个类型的职责
    需要说明一点,单一职责原则不是面向对象语言特有的,只要是模块化的程序设计,都要遵守。

    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    [LeetCode] 687. Longest Univalue Path
    [Daily Coding Problem] 1 (LeetCode 1). Find if two numbers in an array add up to k
    [Daily Coding Problem] 18 (LeetCode 239). Sliding Window Maximum
    [Daily Coding Problem 24] Implement locking in a binary tree.
    [LeetCode] 208(LintCode). Implement Trie(Prefix Tree)
    [Daily Coding Problem] 16. Last N order ids implementation
    队伍总结 2017年5月14日
    ECNU 3260 袋鼠妈妈找孩子(dfs)
    ECNU 3263 丽娃河的狼人传说 (贪心)
    UVA 213 信息解码(二进制&位运算)
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14667637.html
Copyright © 2011-2022 走看看