单一职责

简介: 核心思想:一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。问题由来:T负责两个不同的职责:职责P1,职责P2。

核心思想:一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

问题由来:T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起。

补充说明

高内聚:内聚是指类内部的属性和行为,高内聚就是指:一个类的属性和行为与这个类非常密切,称为高内聚。

低耦合:耦合是指类与类之间或者模块与模块之间的联系,低耦合就是指:耦合度低,易重用、使用灵活。

单一职责优点

(1)降低类的复杂度;
(2)提高类的可读性,提高系统的可维护性;
(3)降低变更引起的风险(降低对其他功能的影响)。

单一职责实现

 1  public class Animal
 2     {
 3         public string myName { get; set; }
 4 
 5         private string _name = null;
 6         public Animal()
 7         {
 8 
 9         }
10         public Animal(string name)
11         {
12             this._name = name;
13         }
14 
15         //封装呼吸空气的方法
16         public void BreathAir()
17         {
19               Console.WriteLine(this._name + "呼吸空气");
21         }
22     }

需求变更:又多了鱼这个物种,它们需要呼吸空气。

解决方案:直接在BreathAir上加判断,但是这样违背了方法意义上的单一职责原则。

 1    public void BreathAir()
 2         {
 3             if (this._name.Equals("鱼"))
 4             {
 5                  Console.WriteLine(this._name + "呼吸水");   //违背了方法级别的单一职责
 6             }
 7             else
 8             {
 9                 Console.WriteLine(this._name + "呼吸空气");
10             }
11         }

新建一个WaterAnimal类,在里面封装BreathWater的方法

 1   public class WaterAnimal
 2     {
 3          private string _name = null;
 4          public WaterAnimal(string name)
 5         {
 6             this._name = name;
 7         } 
 8         //封装呼吸水的方法
 9         public void BreathWater()
10         {
11             Console.WriteLine(this._name + "呼吸水");
12         }
13     }

总结

单一职责虽然能够实现解耦,但是当业务比较复杂的时候,过多的单一职责类可能会导致改动成本最大,所以需要根据需求灵活应用。

 

目录
相关文章
|
数据安全/隐私保护
七大设计原则之单一职责原则应用
七大设计原则之单一职责原则应用
71 0
七大设计原则之迪米特法则应用
七大设计原则之迪米特法则应用
91 0
|
24天前
|
设计模式 网络协议 Java
02.单一职责原则详解
单一职责原则(SRP)是面向对象设计的重要原则,强调一个类或模块应仅负责完成一个特定的职责或功能。通过将复杂的功能分解为多个粒度小、功能单一的类,可以提高系统的灵活性、可维护性和可扩展性。本文详细介绍了如何理解单一职责原则,包括方法、接口和类层面的应用,并通过具体例子解释了其优势和判断标准。此外,还探讨了在实际开发中如何平衡类的设计,避免过度拆分导致的复杂性增加。
55 5
|
设计模式 网络协议 测试技术
你的代码是否按照高内聚、低耦合的原则来设计的?
你的代码是否按照高内聚、低耦合的原则来设计的?
|
设计模式 关系型数据库
软件架构设计原则之迪米特法则
迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合度。迪米特原则主要强调:只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称为成员朋友类,而出现在方法体内部的类不属于朋友类。
111 1
七大设计原则之接口隔离原则应用
七大设计原则之接口隔离原则应用
74 0
|
设计模式 关系型数据库
软件架构设计原则之接口隔离原则
接口隔离原则符合我们常说的高内聚、低耦合的设计思想,可以使类具有很好的可读性、可扩展性和可维护性。我们在设计接口的时候,要多花时间去思考,要考虑业务模型,包括对以后有可能发生变更的地方还要做一些预判。所以,对于抽象、对于业务模型的理解是非常重要的。下面我们来看一段代码,对一个动物行为进行抽象描述。
106 0
|
设计模式 安全 Java
设计原则之接口隔离原则
设计原则之接口隔离原则
76 0
设计原则之接口隔离原则
|
设计模式 安全 Java
设计原则之依赖倒置原则
设计原则之依赖倒置原则
84 0
设计原则之依赖倒置原则
|
设计模式 程序员 测试技术
设计模式 - 六大设计原则之SRP(单一职责)
单一职责原则(Single Responsibility Principle, SRP)又称单一功能原则,是面向对象的五个基本原则(SOLID)之一。 它规定一个类应该只有一个发生变化的原因。
277 0
设计模式 - 六大设计原则之SRP(单一职责)