`

设计模式学习- 单一职责原则

 
阅读更多

单一职责原则的定义:

只能有一个原因引起类的变更

单一职责原则的优点:

1.类的复杂性降低, 实现什么职责都有清晰明确的定义;
2.可读性提高, 复杂性降低, 那当然可读性提高了;
3.可维护性提高, 可读性提高, 那当然更容易维护了;
4.变更引起的风险降低, 变更是必不可少的, 如果接口的单一职责做得好, 一个接口修改只对相应的实现类有影响, 对其他的接口无影响, 这对系统的扩展性、 维护性都有非常大的帮助。
单一职责原则的总结:

单一职责原则并不是绝对的,也要视情况而定,和项目的工期,成本,人员水平息息相关。不过一个接口的方法一定要做到单一职责,因为如果做不到的话一旦接口或者方法发生改变那么相应的实现者或者调用者也要相应的做出改动,对系统的影响比较大,可维护性和可扩展性大大降低。而对于类则尽量做到只有一个原因发生变动,因为系统的变更是无法避免的,一旦发生变更如果能做到只增加相应的接口而对应的类只需要实现该接口那么还是比较理想的。

 

举例:比如一个电话接口,它有4个方法,一个是打电话,一个是发送短信,一个是发送彩信,一个是上网。

所有继承这个接口的类都要实现这4个接口,问题是有的电话是不能发送彩信的,比如诺基亚的黑白机,

有的电话是不能上网的。但是这些电话都要实现一些它其实不能实现的方法,而且每次这个接口增加一个方法他它们都要实现,比如蓝牙,无线传输等。

因为一个接口的改变会改变他所有的实现类,这样的话即使是黑白机也要实现发送彩信,上网和无线传输的功能,这样的话程序就会变的比较混乱。例如有时候调用者明明调用了一个发送彩信的接口却发现根本没有发送出去,后来才发现原来是这个手机不支持 。程序的结构变的非常的模糊,不够清晰明了,我们有时候甚至不能确定某些功能是否可以使用,同时也给后期的维护和扩展带来了很多麻烦,因为一旦改变某个功能就可能需要对应的变更其他依赖于该功能的模块,即使这些模块并不需要这些功能。这就是不遵循单一职责原则带来的坏处。

   那么试着想想如果我们在一开始就将这个接口拆分为3个接口,第一个接口有打电话和发送短信的功能,另外两个接口分别只有一个方法,那就是发送彩信和上网,他们可以继承第一个接口也可以不继承,看具体情况。

那么黑白机就可以实现第一接口,彩屏手机可以实现第二个能发送彩信的接口,智能手机实现第三个能上网的接口,这样一来程序的功能就比较清晰了,因为每个类只实现自己可以实现的方法。这样调用者也可以清楚的知道自己调用对象的某些功能确实是可用的。可扩展性和可维护性也大大提高,每次的变更都只针对于那些确实需要变更的模块,而不会发生做一些小的功能变更就要改一大片代码的情况。

分享到:
评论

相关推荐

    Java设计模式七大原则-单一职责原则.md

    设计模式

    设计模式6大原则:单一职责原则

    设计模式6大原则:单一职责原则

    设计模式(三)之单一职责原则.zip

    单一职责原则可以使类的复杂度降低,实现什么职责都有清晰明确的定义;类的可读性提高,复杂度降低;可读性提高了,代码就更容易维护;变更(需求是肯定会变)引起的风险(包括测试的难度,以及需要测试的范围)降低...

    设计模式六大原则(1):单一职责原则

    本文将深入探讨这六大原则中的第一个——单一职责原则(Single Responsibility Principle, SRP),并结合AcountYear.java这个文件名来解析该原则的应用。 单一职责原则指出,一个类或者一个模块应该只有一个引起它...

    Java设计模式中单一职责原则详解.rar

    其中,"单一职责原则"(Single Responsibility Principle,SRP)是面向对象设计的基本原则之一,也是Java设计模式中的重要组成部分。本篇文章将深入探讨单一职责原则的概念、意义、应用及其在Java编程中的实际运用。...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    通过学习和掌握GoF的23种设计模式,可以显著提高程序员的编码水平,使得开发出的软件系统更加健壮、可扩展、易维护。以上每种模式都有其特定的应用场景,理解和掌握它们的关键在于不断实践和总结,在实际项目中灵活...

    java设计模式---诙谐易懂版

    6. 书中还提到了六大设计原则,包括单一职责原则(Single Responsibility Principle)、里氏替换原则(Liskov Substitution Principle)、依赖倒置原则(Dependency Inversion Principle)、接口隔离原则(Interface...

    23种 设计模式---面向对象的基本原则

    1. 单一职责原则(Single Responsibility Principle, SRP):一个类应该只有一个引起它变化的原因。这意味着一个类应该只做一件事情,这样可以提高代码的可维护性和可读性。 2. 开放封闭原则(Open-Closed ...

    软件设计七大原则详解 1. 单一职责原则(Single Responsibility Principle, SRP) 1.1 原则定义 1.2 为什么需要单一职责原则? 1.3 违反单一职责原则的例子

    1. 单一职责原则(Single Responsibility Principle, SRP) 1.1 原则定义 1.2 为什么需要单一职责原则? 1.3 违反单一职责原则的例子 1.4 应用单一职责原则的改进 1.5 现实应用场景 1.6 单一职责原则的注意事项 2. ...

    单一职责模式例子。

    在软件设计领域,单一职责原则(Single Responsibility Principle,简称SRP)是面向对象设计的六大原则之一,由罗伯特·C·马丁(Robert C. Martin)在其著作《Clean Code》中提出。这个原则强调一个类或者模块应当...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    - **缺点**:违反单一职责原则,容易成为系统瓶颈。 - **1.4 Builder模式**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**:当创建复杂对象的算法应该独立于部分...

    Java设计模式学习.pdf

    - 单一职责原则(Single Responsibility Principle):一个类只有一个引起它变化的原因。 - 开闭原则(Open/Closed Principle):软件实体应当对扩展开放,对修改关闭。 - 里氏代换原则(Liskov Substitution ...

    C#俄罗斯方块源码(单一职责原则)

    【标题】"C#俄罗斯方块源码(单一职责原则)" 涉及到的核心知识点主要是C#编程语言以及软件设计原则中的“单一职责原则”(Single Responsibility Principle, SRP)。C#是一种广泛用于开发Windows应用程序、Web服务和...

    C++设计模式全解析-面向对象原则与常见设计模式深入讲解

    接着详述六大面向对象设计原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特法则)、合成复用原则等,并通过代码例子解释其应用和意义。此外,还讨论了三大类别的设计模式,包括创建...

    《设计模式--基于C#的工程化实现及扩展》.(王翔).rar.rar

    此外,书中可能还会涉及面向对象设计原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP),这些都是设计模式背后的重要理论基础。 总的来说,《设计模式--基于C#...

    设计模式精解-23种设计模式解析

    通过对这些设计模式的学习和实践,开发者能够更好地理解面向对象设计的基本原则,并将其应用于实际的软件开发过程中。每一种设计模式都有其适用场景,正确地选择和使用设计模式能够帮助我们构建出更为优雅和高效的...

    设计模式--java版.rar

    同时,设计模式也有助于提升系统的可扩展性和可维护性,因为它们遵循了良好的设计原则,如单一职责原则、开闭原则、里氏替换原则、依赖倒置原则和接口隔离原则。 在Java开发中,熟练掌握和运用设计模式不仅可以提升...

    设计模式--电子商务

    例如,单一职责原则确保了一个类只负责一项功能,这有助于维护和扩展电子商务系统;工厂方法模式允许创建对象而无需指定创建对象的具体类,为电子商务平台的订单处理提供了高度的灵活性;策略模式允许在运行时选择...

    设计模式六大原则 设计模式详解

    除了单一职责原则,设计模式的其他五大原则同样重要: 1. 开闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应对于扩展开放,对于修改关闭。这意味着我们应该可以通过扩展已有代码来实现新...

    简单讲解Java设计模式编程中的单一职责原则

    Java设计模式中的单一职责原则(Single Responsibility Principle,SRP)是面向对象设计的基本原则之一,它的核心思想是:一个类或者一个模块应该只有一个引起它变化的原因。这意味着一个类应该只负责一项职责,使得...

Global site tag (gtag.js) - Google Analytics