大话设计模式-单一职责原则

单一职责原则

在大话设计模式中,作者利用手机拍摄UFO的例子为我们讲解了单一职责原则这一设计原则,在作者的例子中“智能手机”的设计就违背了单一职责原则,最终才会导致拍摄UFO的照片模糊。在作者的例子中,智能手机包含了各种各样的功能,又能拍照,又能打电话,又能听音乐。这种设计显然违背了单一职责原则,这样就导致了在摄影功能上,智能手机比不上摄像机;在音乐功能上,智能手机的音质比不上CD或者MP3等等。
下面是我看完大话设计模式后,自己对单一职责原则的理解。

概念

什么是单一职责原则?文中的解释是:就一个类而言, 应该仅有一个引起它变化的原因,这句话理解起来可能稍微复杂了一点,但是通俗来讲,所谓的单一职责原则其实就是他名字所表达的字面意思:它强调一个类或模块应该只负责一个职责或功能。这有助于保持代码的可维护性、灵活性和易于理解。
其实我们前面讲到的简单工厂模式策略模式中,我们都用到了单一职责原则。在计算器的例子中,我们为了分离加减乘除的计算逻辑和界面逻辑,创建了Operation父类类和加减乘除子类;在商场收费的例子中,我们为了分离收费策略和页面逻辑,创建了CashSuper父类和各种收费策略的子类。这些都是单一职责原则的体现。
现在让我们再通过一个简单的例子来进一步理解单一职责原则:
假设我们要编写一个员工信息管理程序,其中需要根据员工的姓名和年龄从数据库中查找员工信息。我们创建了一个名为 Employee 的 Java 类:

public class Employee {
    private String name;
    private Integer age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return this.age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<Employee> searchEmployee() {
        // 查找员工信息的逻辑
    }
}

上述代码就违反了单一职责原则,因为 Employee 类有两个职责:

  1. 设置与员工相关的属性(name 和 age)。
  2. 在库中搜索员工信息。
    这样就会有两种原因可能导致类的修改:其一是设置员工属性的规则发生了变化,我们要修改这个类;其二是当我们搜索员工的规则发生变化时也需要修改这个类。当然在业务逻辑简单的情况下,好像看不出什么缺陷,那么设想一下,如果我们在这个类里面有成千上万种操作,每一种操作发生变化我们都需要修改这个类,这样就会导致这个类难以维护。

因此,为了遵循单一职责原则,我们需要将两个职责分离。我们可以创建另一个名为 RepositoryView 的类,它专门负责搜索员工。我们将 searchEmployee() 方法移至 RepositoryView 类,并在构造函数中引用 Employee 类:

public class RepositoryView {
    private Employee employee;

    public RepositoryView(Employee employee) {
        this.employee = employee;
    }

    public List<Employee> searchEmployee() {
        // 查找员工信息的逻辑
    }
}

通过这样的重构,我们将具有两个职责的初始 Employee 类拆分为两个类,每个类都有自己的单一职责。

总之,单一职责原则有助于创建集中且简洁的类,使其更易于理解和重用。在实际开发中,遵循单一职责原则可以提高代码质量,减少维护成本,以及更好地应对变化

优点

当我们遵循单一职责原则时,代码和系统会受益于以下优点:

  1. 清晰性和可读性:每个类或模块只负责一个职责,使得代码更加清晰、易于理解。开发人员可以更快地找到所需的功能,而不必在一个类中搜索多个职责。
  2. 可维护性:单一职责原则有助于减少代码的耦合性。当我们需要修改某个功能时,只需关注与该功能相关的类,而不会影响其他部分。这样,维护和更新变得更加容易。
  3. 重用性:拥有单一职责的类更容易重用。因为它们专注于一个功能,其他部分的代码不会对其产生影响。这使得我们可以更轻松地将这些类用于其他项目或模块。
  4. 测试性:单一职责原则使单元测试更加简单。我们可以针对每个职责编写独立的测试,确保每个功能都按预期工作。
  5. 灵活性和扩展性:当我们需要添加新功能时,单一职责的类更容易扩展。我们只需创建一个新的类来处理新的职责,而不必修改现有的代码。

总之,遵循单一职责原则有助于构建高质量、易于维护的软件系统,提高开发效率并降低错误的风险。
在这里插入图片描述

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值