`
yuxuan1215
  • 浏览: 14066 次
  • 性别: 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

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

    面向对象设计原则 面向对象设计原则

    面向对象设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP ===

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

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

    面向对象的11个原则

    单一职责原则(The Single Responsibility Principle) 开放/关闭原则(The Open Closed Principle) 里氏替换原则(The Liskov Substitution Principle) 依赖倒置原则(The Dependency Inversion Principle?) 接口分离...

    c++ 面向对象设计五大原则

    面向对象设计(OOD)是面向对象编程(OOP)必不...单一职责原则可以看作是高内聚、低耦合在面向对象原则上的引申。类的职责过多,容易导致类间职责依赖,提高耦合度,降低内聚性。通常意义下的单一职责,指的是类只有一

    第2章_面向对象设计原则.ppt

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

    JAVA面向对象的设计原则

    JAVA面向对象设计原则,单一职责原则,开闭原则(OCP) 替换原则(LSP)

    Java面向对象程序设计杨晓燕面向对象基本原则和模式.pptx

    单一职责原则和最少知识原则 最少知识原则(Least Knowledge Principle, 简称为LKP)又叫迪米特法则(Law of Demeter,简写为LoD),就是说一个对象应当对其他对象有尽可能少的了解。就像我国古代老子所说的"使民...

    面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

    面向对象 设计原则 单一职责原则--SRP 开放封闭原则--OCP Liskov替换原则--LSP 依赖倒置原则--DIP 接口隔离原则--ISP

    Java_面向对象设计原则总结

    4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed Principle (OCP)   二 包的设计原则 6 重用发布等价原则-Release Reuse Equivalency Principle (REP) 7 无环依赖...

    design-pattern-java.pdf

    基础知识 基础知识设计模式概述 从招式与内功谈起——设计模式概述(一) 从招式与内功谈起——设计模式概述(二) 从招式与内功谈起——设计模式概述(三) 面向对象设计原则 面向对象设计原则之单一职责原则 面向...

    PHP面向对象五大原则之单一职责原则(SRP)详解

    主要介绍了PHP面向对象五大原则之单一职责原则(SRP),结合实例形式详细分析了单一职责原则(SRP)的概念、原理、定于与使用方法,需要的朋友可以参考下

    面向对象设计原则java

    详细介绍了: 单一职责原则 开闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成复用原则 迪米特法则

    面向对象设计三要素五原则六视点

    面向对象三要素 封装(Encapsulation) ... 单一职责原则(SRP) 开放-封闭原则(OCP) Liskov替换原则(LSP) 依赖倒置原则(DIP) 接口隔离原则(ISP) 变化(Change) 简约(Simplicity) 一致(Coherance)

    设计原则.ppt

    面向对象的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口分离原则 迪米特法则 合成复用原则

    面向对象原则.zip

    1面向对象6大原则--单一职责原则 2面向对象6大原则--里氏代换原则 3面向对象6大原则--开闭原则 4面向对象6大原则--依赖倒转原则 5面向对象6大原则--合成复用原则 6面向对象6大原则--接口隔离原则

    SunshlnW#Design-Mode#面向对象设计原则1

    面向对象设计原则常见原则依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)。封装变化点使用封装来创建对象之间的分界

    Java设计模式-面向对象七大设计原则

    例如:随着计算机的不断发展,程序学习这门技术也越来越重要,很多人都开启了...面向对象设计原则一共有七个:开闭原则、里氏替换原则、依赖倒转原则、单一职责原则、接口隔离原则、组合/聚合复用原则、迪米特法则。

Global site tag (gtag.js) - Google Analytics