单一职责原则(SRP:Single responsibility principle)

目录

 

1、基本介绍

2、单一职责原则注意事项和细节

3、应用实例

3.1、需求

3.2、传统方式实现

3.3、遵守单一职责原则实现


1、基本介绍

单一职责原则(SRP:Single responsibility principle):又称单一功能原则。是对类来说的,即一个类应该只负责一项职责,如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。

2、单一职责原则注意事项和细节

  • 降低类的复杂度,一个类值负责一项职责。
  • 提高类的可读性,可维护性。
  • 降低变更引起的风险。
  • 通常情况下,我们应当遵守单一职责原则,只是逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则。

3、应用实例

3.1、需求

有三种动物:猫、狗、麻雀;编程实现三种动物鸣叫。

3.2、传统方式实现

设计一个动物类:

public class Animal{
    public void cry(String animalName){
        if("猫".equals(animalName)){
            System.out.println(animalName+":喵喵喵!");
        }else if("狗".equals(animalName)){
            System.out.println(animalName+":汪汪汪!");
        }else if("麻雀".equals(animalName)){
            System.out.println(animalName+":叽叽喳喳!");
        }
    }
}

客户端类:

public class Client{
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.cry("猫");
        animal.cry("狗");
        animal.cry("麻雀");
    }
}

问题分析:

这样设计达到了要求,但是违反了单一职责原则

解决方式非常简单,根据动物叫声不同,分解成不同的类即可。

3.3、遵守单一职责原则实现

设计三个类:猫、狗、麻雀

/**
 * 动物接口
 */
public interface Animal{
    public void cry(String animalName);
}

/**
 * 猫类
 */
class Cat implements Animal{
    @Override
    public void cry(String animalName) {
        System.out.println(animalName+":喵喵喵");
    }
}
/**
 * 狗类
 */
class Dog implements Animal{
    @Override
    public void cry(String animalName) {
        System.out.println(animalName+":汪汪汪");
    }
}

/**
 * 麻雀类
 */
class Sparrow implements Animal{
    @Override
    public void cry(String animalName) {
        System.out.println(animalName+":叽叽喳喳");
    }
}

客户端类:

public class Client{
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();
        Animal sparrow = new Sparrow();

        dog.cry("狗");
        cat.cry("猫");
        sparrow.cry("麻雀");
    }
}

分析:我们将根据功能(叫声)的不同将三个动物设计为三个类,每个类只提供一个功能(叫声),符合单一职责原则。

发布了98 篇原创文章 · 获赞 26 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_42425970/article/details/97285127
今日推荐