`
yuxuan1215
  • 浏览: 14740 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

面向对象的设计原则之单一职责原则

 
阅读更多
1 定义

单一职责原则(SRP,SingleResonsibility Principle):一个类应当只有一个改变它的原因。(There should never be more than one reason for aclass to change)

换而言之就像人不能一心二用一样,一个类应该只做一件事和仅有一个使它改变的原因。如果一个类包含一个以上的职责的话,那么多个职责就会耦合一起,影响复用。例如在使用java web开发时n层架构模式就是单一职责的宏观体现,我们会把展示层、控制器、业务逻辑层、以及DAO层实现分离,每一层次的处理相互隔离,降低了耦合度,试想下我们如果将页面显示,业务逻辑处理,数据库的操作都写在页面上,将会出现什么样的后果?

2 单一职责原则举例

单一职责原则从其定义非常好理解,虽然简单,却是非常重要的面向对象设计原则(当然单一职责原则并非面向对象设计独有)。回想一下我们曾经开发经历,虽然都知道应该设计类时应该职责分离,但是在开发的过程中,一时偷懒或者未经思考在一个类中临时加入一些不是此类职责的方法,积累变多时,发现系统应用变得杂乱不堪,业务逻辑也变得混乱,这时候维护也变得非常棘手,你是不是有过这样的经历呢?大哭

下面看个例子:当我们设计一个购物系统时,会设计用户类(User)和订单类(Order),如果我们的用户类是如下设计的话:

public class User {
    public void addUser(){
       System.out.println("新增用户");
    }
    public void deleteUser(){
       System.out.println("新增用户");
    }
    public void upateUser(){
       System.out.println("更新用户");
    }
    public void queryUser(){
       System.out.println("查询用户");
    }
    public void queryOrder(){
       System.out.println("查询订单");
    }
}
是不是看着都感觉别扭,用户类里出现订单的查询订单显得不伦不类,很明显用户类里出现了第二个改变它行为的原因即查询订单,违反了单一职责原则。因此我们需要对用户进行职责分离分成用户类(User)和订单类(Order类)。

User类:

public class User {
   public void addUser(){
       System.out.println("新增用户");
    }
    public void deleteUser(){
       System.out.println("新增用户");
    }
    public void upateUser(){
       System.out.println("更新用户");
    }
    public void queryUser(){
       System.out.println("查询用户");
    }
}

Order订单类:

public class Order {
    public void queryOrder(){
       System.out.println("查询订单");
    }
}

这样User类和Order类的职责就会变得清晰不会耦合在一块了。这样系统设计的就会更健壮。

3 单一职责原则的优点

单一职责原则分离对象间的职责,降低了对象间的依赖关系,那么也就降低了耦合度。有利于对象的稳定。

它使得职责分离,代码更清晰,更易阅读。

降低耦合度自然也增加的类和对象的复用性,增强系统的可维护性。

4 使用单一职责原则需要注意的地方

使用单一职责原则有一个问题,“职责”没有一个明确的划分标准,如果把职责划分的太细的话会导致接口和实现类的数量剧增,反而提高了复杂度,降低了代码的可维护性。所以使用这个职责的时候还要具体情况具体分析。建议就是接口一定要采用单一职责原则,实现类的设计上尽可能做到单一职责原则,最好是一个原因引起一个类的变化。(引用别人的分析)

分享到:
评论

相关推荐

    面向对象设计原则.ppt

    1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。这意味着每个类应专注于一项任务,避免将多个职责混杂在一起。在员工工资计算的例子中,`Employee`类只负责提供薪金计算的接口,具体的计算逻辑则...

    面向对象设计原则

    面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计原则PPT

    面向对象设计原则概述 单一职责 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    程序员必备的七大面向对象设计原则

    面向对象设计原则是软件设计中最重要的原则之一,它们是软件设计的基础和核心。面向对象设计原则的应用可以提高软件的开发效率、质量和可维护性。下面是七大面向对象设计原则的总结: 一、开闭原则 开闭原则是面向...

    面向对象设计原则英文文章

    首先,我们来了解四个基础的面向对象设计原则:单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)和接口隔离原则(ISP)。 1. 单一职责原则(Single Responsibility Principle, SRP):一个类或模块...

    面向对象设计原则解析

    1. **单一职责原则(Single Responsibility Principle, SRP)** 这一原则规定,一个类应该只有一个引起其变化的原因。换句话说,每个类应专注于完成一个特定的职责或功能,避免职责混杂。这样可以提高代码的稳定性...

    面向对象设计原则.pdf

    ### 面向对象设计原则详解 面向对象设计原则是一系列指导软件开发人员构建高质量、易于维护和扩展的软件系统的准则。这些原则旨在帮助开发者创建更健壮、更灵活的系统,减少代码间的耦合度,并提高代码的重用性和...

    UML简介与面向对象的设计原则

    1. **单一职责原则(SRP)**:每个类或模块应仅有一个引起其变化的原因,以保持代码的高内聚性。 2. **开放封闭原则(OCP)**:软件实体(类、模块、函数等)应该是可扩展的,但对修改应封闭。这意味着新增功能时,...

    C++设计模式课件2_面向对象设计原则.pdf

    3. **单一职责原则(Single Responsibility Principle, SRP)** - **原则阐述**:一个类应该只有一个改变的原因。 - **实践意义**:通过将类的功能细化到单一职责,降低类的复杂度,提高代码的可读性和可维护性。 ...

    面向对象七大原则

    面向对象编程的七大原则是指在面向对象设计中所遵循的七个基本原则,它们是:开闭原则、依赖倒转原则、单一职责原则、接口隔离原则、迪米特法则、里氏替换原则和组合优于继承原则。 1. 开闭原则(Open-Closed ...

    java面向对象设计的六大原则

    以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, SRP)、开放封闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)、依赖倒置原则...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    1. 单一职责原则(SRP):一个类或模块应只有一个改变的原因。这有助于保持代码的模块化,降低耦合度。 2. 开放封闭原则(OCP):软件实体(类、模块、函数等)应对扩展开放,对修改关闭。这意味着我们可以添加新的...

    面向对象设计原则源码及文档

    面向对象设计原则是OOPS(Object-Oriented ...这些原则已知的有七个,包括:单一职责原则、开闭原则、里氏代换原则、依赖注入(倒转)原则、接口分离原则、迪米特原则、合成聚合复用原则。(文件包括实例源码及文档)

    面向对象设计原则与设计模式

    1. 单一职责原则(Single Responsibility Principle, SRP): 每个类或模块应有且只有一个职责,避免功能混合,提高代码的可读性和可维护性。 2. 开闭原则(Open/Closed Principle, OCP): 软件实体(如类、模块、...

    单一职责原则(SRP)

    单一职责原则(SRP)是面向对象设计的五个基本原则之一。该原则规定,一个类应当只有一个引起它变化的原因。换言之,一个类应该只有一个职责,避免一个类承担多个职责,从而降低类的耦合度和设计复杂度。 在软件...

Global site tag (gtag.js) - Google Analytics