首页 > 其他分享 >设计模式 > 单一职责原则

设计模式 > 单一职责原则

时间:2023-01-31 22:33:49浏览次数:41  
标签:职责 原则 SRP UserInfo 设计模式 单一 string

SOLID原则并非单纯的1个原则,而是由5个设计原则组成的,它们分别是单一职责原则,开闭原则,里氏替换原则,接口隔离原则和依赖反转原则。

单一职责原则(SRP)

定义:一个类或者模块只负责完成一个职责(或者功能)。

从定义来看,一个类只负责完成一个职责或者功能。也就是说,不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它的职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。

单一职责被定义为“引起变化的原因”。如果我们有两个动机去改写一个方法,那么这个方法就具备两个职责。如果一个方法承担了太多职责,那么在需求变化过程中,需要改写的可能性就越大。

SRP 原则在很多设计模式中都有着广泛的运用,例如代理模式、迭代器模式、单例模式和装饰者模式。

举例:

在社交产品中,我们用UserInfo对象来记录用户的信息。UserInfo的设计是否满足单一职责原则。

UserInfo = {
  userId: stirng,
  username: string,
  email: string,
  telephone: string,
  createTime: string,
  avatar: string,
  provinceOfAddress: string, // 省  
  cityOfAddress: string, // 市
  regionOfAddress: string, // 区
  // ...... 其他属性和方法
}

1、UserInfo对象包含的都是跟用户相关的信息,所有属性都属于用户这样的一个模型,满足单一职责原则

2、地址信息在UserInfo对象中,可以继续拆分成独立的UserAddress,UserInfo只保留其他信息,拆分之后更加单一。

如果在这个产品中,用户信息和其他信息一样,只是单纯展示,那么UserInfo就是合理的,如果用户的地址信息还用在电商物流中,那么最好将地址信息拆分出来,独立成用户物流信息或者叫地址信息、收获信息。

评价一个类或者对象职责是否单一,并没有非常明确、可以量化的标准。在真正的开发中,没必要过于未雨绸缪,过度设计,为了设计而设计。

何时应该分离职责

1、在ajax请求的时候,创建xhr对象和发送xhr请求几乎总是在一起的,那么创建xhr和发送xhr的职责就没必要分开

2、职责的变化轴线仅当它们确定变化时才有意义,即使两个职责已经耦合在一起,但它们还没有改变的征兆,没必须主动分离,在重构的时候分离也不迟。

违反SRP原则

比如jQuery中attr方法,明显违反了SRP原则。jQuery的attr方法非常庞大,即负责取值,又负责赋值。但是对于用户来说,简化了用户的使用。

SRP优缺点

优点:降低了单个类或者对象的复杂度,按照职责把对象分解成更小的粒度,有助于代码的复用,也有利于进行单元测试。当一个职责需要变更的时候不会影响其他的职责。

缺点:增加代码的复杂度。当我们按照职责把对象分解成更小的粒度之后,实际上也增大了这些对象之间相互联系的难度。

 

标签:职责,原则,SRP,UserInfo,设计模式,单一,string
From: https://www.cnblogs.com/zmyxixihaha/p/17081046.html

相关文章

  • 24种设计模式--工厂模式(Factory)创建型
    目录1.简单工厂模式simpleFactory概述接口类实现类简单工场类测试类测试结果:参考链接1.简单工厂模式simpleFactory概述工厂模式中,我们在创建对象时不会对客户端暴露创......
  • 一篇文章带你了解设计模式——创建者模式
    一篇文章带你了解设计模式——创建者模式在之前的文章中我们已经学习了设计模式的基本原则和基本分类下面我们来介绍第一种设计模式,创建型模式的主要关注点是怎样创建对......
  • 23种常见设计模式
    记忆口诀:23种常用设计模式,创建型模式5种,结构性模式7种,行为模式11种。创建型模式:工厂方法、抽象工厂、生成器、原型、单例结构型模式:适配器、桥接、组合、装饰、外观、享......
  • 领域驱动设计模式、原理与实践
    [email protected]《领域驱动设计模式、原理与实践》204MB751页2016年2月第1版  ......
  • 24种设计模式--策略模式(strategy)、模板模式(template)
    @目录第一部分:策略模式1.定义接口:Game2.实现Game接口:2.1DNF2.2LOL3.引用的上下文:4.测试类4.1测试结果:第二部分:模板模式复用策略模式的代码1.定义钩子(抽象类):2.具体实现类......
  • java常用的设计模式
     java的设计模式一、单例模式  基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点。常见写法:  1.饿汉式publicclassSingleton{priva......
  • C++ 设计模式--模板方法Template Method
    1.定义定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。TemplateMethod使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某......
  • 【设计模式】行为型
    职责链模式Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理命令模式 将请求转换为一个包含与请求相关的所有信息的独立对象。 可......
  • 24种设计模式之单例模式(singleton)
    24种设计模式之单例模式(singleton)目录24种设计模式之单例模式(singleton)饿汉模式:推荐使用懒汉模式:不推荐静态内部类模式:推荐最完美的方式java之父推荐:解决线程同步、反序......
  • 跟我学Java设计模式第7天:行为型设计模式
    Java设计模式文章目录​​跟我学Java设计模式第一天:设计模式概述和软件设计原则​​​​跟我学Java设计模式第二天:简单工厂模式、工厂方法模式、抽象工厂模式​​​​跟我学......