`

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

 
阅读更多

单一职责原则的定义:

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

单一职责原则的优点:

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

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

 

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

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

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

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

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

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

分享到:
评论

相关推荐

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

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

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

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

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

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

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

    NULL 博文链接:https://lijie-insist.iteye.com/blog/2190970

    单一职责原则

    在架构中体验设计模式和算法之美 Java设计原则 单一职责原则

    单一职责模式例子。

    设计模式6大原则之单一职责械,SIP,一个类只负责处理一个业务,

    设计模式6大原则

    设计模式原则:单一职责原则,里氏替换,依赖倒转,接口隔离,开放关闭等等。

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

    主要介绍了Java设计模式编程中的单一职责原则,这在团队开发编写接口时经常使用这样的约定,需要的朋友可以参考下

    设计模式之六大原则详解,Markdown笔记

    详细介绍了设计模式六大原则,配有示例代码和图片,有开闭原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则等等。

    php 设计模式六大原则

    php 设计模式六大原则 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 word版

    24种设计模式与6大设计原则

    策略模式[STRATEGY PATTERN] 代理模式[PROXY PATTERN] 单例模式[SINGLETON PATTERN] 多例模式[MULTITION PATTERN] ...六大设计原则:单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则,开闭原则。

    设计模式六大原则

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则...

    设计模式六大原则.doc

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则...

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

    详细介绍设计模式的六大原则,有不足之处希望大家多指教。参考《设计模式之禅》

    用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化

    单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。 依赖倒转原则(DIP),A. 高层模块不应该依赖低层...

    IOS设计模式

    1、 IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle) 定义  就一个类而言,应该仅有一个引起它变化的原因。 定义解读  这是六大原则中最简单的一种,通俗点说,就是不存在多个...

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    1.单一职责原则: 不要存在多于一个导致类变更的原因 2.里氏替换法则:子类可以扩展父类的功能,但不能改变父类原有的功能 3.依赖倒置原则:面向接口编程 4.接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对...

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

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

Global site tag (gtag.js) - Google Analytics