快捷搜索: 王者荣耀 脱发

Java23种设计模式七大原则--单一职责原则

一.定义:

单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。 这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。 一类共同属性的对象做具体一类事儿,如果具体的属性种类太多,就会产生代码冗余

二.作用: 

单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。

    降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。 提高类的可读性。复杂性降低,自然其可读性会提高。 提高系统的可维护性。可读性提高,那自然更容易维护了。 变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。

三.实现方法:

单一职责原则是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中。而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。

四.代码演示:

反例:

package com.zking.design.srp;

/**
 * @description: 单一职责原则
 * @author: codinglife
 * @time: 2021/5/20 16:43
 */
public class Transports {

    public void tyre(String transportName){
        System.out.println(transportName+"有4个轮胎");
    }

}
package com.zking.design.srp;

/**
 * @description: 单一职责原则
 * @author: codinglife
 * @time: 2021/5/20 16:46
 */
public class TransportMain {

    public static void main(String[] args) {
        Transports transports=new Transports();
        transports.tyre("汽车");
        transports.tyre("三轮车");
        transports.tyre("摩托车");
        transports.tyre("单车");
        
    }

}

这种情况就是典型的一个类干所有,无法合理去兼容多种对象,所以要做到单一职责的拆分,一类相同属性的对象做具体一类事儿

正例:

package com.zking.design.srp;

/**
 * @description: 单一职责原则
 * @author: codinglife
 * @time: 2021/5/20 16:48
 */
public class Bike {

    public void tyre(String transportName){
        System.out.println(transportName+"有2个轮胎");
    }

}
package com.zking.design.srp;

/**
 * @description: 单一职责原则
 * @author: codinglife
 * @time: 2021/5/20 16:47
 */
public class Car {

    public void tyre(String transportName){
        System.out.println(transportName+"有4个轮胎");
    }

}
package com.zking.design.srp;

/**
 * @description: 单一职责原则
 * @author: codinglife
 * @time: 2021/5/20 16:46
 */
public class TransportMain {

    public static void main(String[] args) {
        
        Car car=new Car();
        car.tyre("汽车");

        Bike bike=new Bike();
        bike.tyre("单车");

    }

}

结果:

经验分享 程序员 微信小程序 职场和发展