单一职责

简介: 核心思想:一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。问题由来: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     }

总结

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

 

目录
相关文章
|
11月前
|
数据安全/隐私保护
七大设计原则之单一职责原则应用
七大设计原则之单一职责原则应用
48 0
|
11月前
七大设计原则之迪米特法则应用
七大设计原则之迪米特法则应用
64 0
|
12月前
|
设计模式 关系型数据库 数据安全/隐私保护
软件架构设计原则之单一职责原则
单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因。假设我们有一个类负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能导致另一个职责的功能发生故障。这样一来,这个类就存在两个导致类变更的原因。如何解决这个问题呢?将两个职责用两个类来实现,进行解耦。后期需求变更维护互不影响。这样的设计,可以降低类的复杂度,提高类的可读性,提高系统的可维护性,降低变更引起的风险。总体来说,就是一个类、接口或方法只负责一项职责。
92 0
软件架构设计原则之单一职责原则
|
3月前
软件设计原则:耦合与内聚
软件设计原则:耦合与内聚
89 0
|
3月前
|
设计模式 存储 NoSQL
【设计模式】软件设计原则-单一职责原则
【1月更文挑战第12天】【设计模式】软件设计原则-单一职责原则
|
9月前
|
设计模式 网络协议 测试技术
你的代码是否按照高内聚、低耦合的原则来设计的?
你的代码是否按照高内聚、低耦合的原则来设计的?
|
设计模式 安全 Java
设计原则之接口隔离原则
设计原则之接口隔离原则
56 0
设计原则之接口隔离原则
|
设计模式 安全 Java
设计原则之依赖倒置原则
设计原则之依赖倒置原则
67 0
设计原则之依赖倒置原则
|
设计模式 算法
原则的重要性(单一职责原则-开放封闭原则)一
原则的重要性(单一职责原则-开放封闭原则)一
79 0
|
设计模式 程序员 测试技术
设计模式 - 六大设计原则之SRP(单一职责)
单一职责原则(Single Responsibility Principle, SRP)又称单一功能原则,是面向对象的五个基本原则(SOLID)之一。 它规定一个类应该只有一个发生变化的原因。
196 0
设计模式 - 六大设计原则之SRP(单一职责)