上篇文章提及到设计模式中应遵循的设计原则,并且列出了设计模式中应当遵循的六大原则。

次篇文章主要讨论单一职责原则。

单一职责原则(SRP):

不要存在多于一个导致类变更的原因。简单的讲,就是一个类或接口只负责一个"职责"。

如果一个类有一个以上的职责,这些职责就耦合在一起了,这种设计十分脆弱,因为当一个职

则的变换很可能影响其他职责,会影响复用性。

这里需要对类或接口的"职责"做一些理解,SRP中将"职责"理解为“变化的原因”,当你有N

个动机去改变类的时候,那么这个类就违法了SRP原则.

Tips:这里只有你去真正修改了类的时候违反了SRP原则,如果仅仅只是一种推测,并未

实际付之行动,不算违反之一原则。

单一职责原则(SRP)优点:

                1、可以降低类的复杂度

2、提高类的可读性,系统的可维护性

3、降低变更的时候对其他功能的影响(变更不可避免)

简单举一个例子:关于动物吃东西的问题。

编写一个类用于描述动物吃东西:

package com.kiritor; /**  * @author Kiritor  * 动物类的描述*/ class Animal {    public void eatFood(String name)    {      System.out.println(name+"吃草");    } }  public class Client {  public static void main(String[] args) {        Animal animal = new Animal();      animal.eatFood("羊");      animal.eatFood("牛");  }    } 

不过这里问题就来了,并不是所有动物都吃草的啊,也有肉食动物的。在不违背单一

原则的情况下,我们必须将动物类细分为,肉食性和素食性的。

class AnimalMeat {      public void eatFood(String name)      {           System.out.println(name+"吃肉");       } } class AnimalGlass {   public void eatFood(String name)      {           System.out.println(name+"吃草");       } }  public class Client {   public static void main(String[] args) {        AnimalGlass animal = new AnimalGlass();        animal.eatFood("羊");      AnimalMeat animal2 = new AnimalMeat();         animal2.eatFood("老虎");    }    }

由上述代码可以知道,这种修改的开销还是挺大的,不仅需要添加新类,还要修改客户

端代码。有事还不如这样修改:

class Animal{   public void eatFoodGlass(String animal){        System.out.println(animal+"吃草");     }   public void eatFoodMeat(String animal){         System.out.println(animal+"吃肉");     } }  public class Client{   public static void main(String[] args){         Animal animal = new Animal();      animal.eatFoodGlass("牛");         animal.eatFoodGlass("羊");         animal.eatFoodMeat("老虎");     } } 

造成上述的结果就是在使用单一原则的情况下,对于"职责"的划分没有一个明确的标准,如果

把职责划分过细反而会造成接口和实现类的数量剧曾,反倒不利于维护和阅读。所以在使用这个

原则的时候还是要具体问题具体分析。

建议就是接口一定要采用单一职责原则,实现类的设计上尽可能做到单一职责原则,最好是一个

原因引起一个类的变化。

转载于:https://blog.51cto.com/kiritor/1226704

设计模式原则篇:(1)单一职责原则--Single Responsibility Principle相关推荐

  1. 设计模式-02.经典设计原则-第一节-单一职责原则,开闭原则,里式替换,接口隔离【万字长文系列】

    文章目录 设计模式经典设计原则-第一节 单一职责原则(SRP) 如何理解单一职责原则? 如何判断类的职责是否足够单一? 类的职责是否设计得越单一越好? 开闭原则(OCP) 如何理解"对扩展开 ...

  2. 设计模式个人总结,单一职责原则总结

    总结经验 近期自学Unity引擎,学到了关于设计模式这一块,以前学习Java多次接触设计模式,也在应用的开发过程中频繁使用.虽然开发过程中没有特意去强调使用设计模式,但设计模式的使用总是潜移默化的,现 ...

  3. [转]设计模式六大原则[1]:单一职责原则

    定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的 ...

  4. 面象对象设计6大原则之一:单一职责原则

    转载自 面象对象设计6大原则之一:单一职责原则 单一职责原则(SRP),The Single Responsibility Principle 定义 一个类的修改只能有一个被修改的原因. 通俗地讲,就 ...

  5. 每天一学设计模式(一、单一职责原则)

    引言 本文参考以下这篇文章 https://blog.csdn.net/guorui_java/article/details/125947300 定义 单一职责原则(Single responsib ...

  6. 学习设计模式 - 六大基本原则之单一职责原则

    设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Princ ...

  7. 设计模式之禅之单一职责原则

    声明:本文为阅读秦小波所写的<设计模式之禅>所写小结,文章内容可能有部分引述此书. 单一职责原则(Single Responsibility Principle) 1.定义:    在接口 ...

  8. 【编码魔法师系列_六大原则1】单一职责原则(Single Responsibility Principle)

    学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题.设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性.可维护性和可重用性,从而让我们的开发效率更高.通 ...

  9. 设计模式(一)---单一职责原则

    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变 ...

最新文章

  1. Keypress - 捕获键盘输入的JavaScript库
  2. SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新...
  3. 苏宁易购11.11:商品详情系统架构设计
  4. require.context实现前端工程自动化
  5. sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接
  6. linux netstat
  7. jq多选按钮值_关于jquery的多选框获取值和状态回显
  8. 携程回应突发故障:「bug已修复」;罗永浩再嘲iPhone11浴霸相机;React 16.10.0发布|极客头条...
  9. 全球四大互联网公司最大的敌人是谁
  10. arch linux 安装 键盘,Arch Linux安装
  11. k3刷机 重置_斐讯K3刷机教程:一直重启、忘了密码怎么办?手机刷机包下载
  12. Django表单系统
  13. linux如何回到下一级,linux如何返回上一级目录
  14. excel单元格内容拆分_Excel技巧:帮你把单元格内容颠倒顺序显示
  15. 测试面试题集锦| 软件测试常见必考问题与流程篇(附带答案)
  16. 抽象代数 04.01 群的生成元组
  17. Bandizip下载网盘地址
  18. Unity 水波纹Shader
  19. 用Java实现的eChat聊天服务器
  20. 分布式系统测试的难点与分析

热门文章

  1. LeetCode——Find the Difference
  2. canvas学习绘制扇形
  3. Windows Phone 二十、陀螺仪
  4. 数据库空值(Null)小结
  5. ExtJS之 标准布局类(针对于panel)
  6. Crystal Reports
  7. 后裂变时代:拼团、砍价、分销等主流玩法盘点及未来趋势
  8. 我跟17位顶级游戏策划人学到的3个产品方法论
  9. 我最近做产品的一些「感悟」
  10. 一个公式、五大指标帮你构建产品经理数据分析思维