单一职责原则,全称Single Responsibility Principle,英文缩写SRP。
简单来说,就是一个类应该只有一个变化的原因,在一个类里,只负责一个职责。
如果一个类需要修改,那么就是因为其职责发生变化这个原因才需要修改,如果因为其它原因而去修改,那这个类就是负责了多个职责。
这里定义一个Pen类,它有Write写字的方法。
public class Pen { public void Write() { Console.WriteLine("写字"); } } public static void Main(string[] args) { Pen pen = new Pen(); pen.Write(); }
如果想定义用不同颜色的笔来写,这个设计就满足不了。比如说,用黑笔和红笔,这里就具有两个职责,一个是写黑色字,一个是写红色字。下面修改方法来满足设计原则。
第一种
public class Pen { public void Write(String color) { if (color == "black") { Console.WriteLine("写黑字"); } else if (color == "red") { Console.WriteLine("写红字"); } } }
这样让Write方法可以同时写黑字和红字。设计上,Write可以写不同的字,Write是只有一个写字的职责。
第二种
public class Pen { public void WriteBlack() { Console.WriteLine("写黑字"); } public void WriteRed() { Console.WriteLine("写红字"); } }
在Pen类中定义WriteBlack和WriteRed两个方法。设计上,Pen类可以写黑字和红字,Pen是只有一个写字的职责。
第三种
public class BlackPen { public void Write() { Console.WriteLine("写黑字"); } } public class RedPen { public void Write() { Console.WriteLine("写红字"); } }
定义BlackPen和RedPen,每种笔都可以写字。设计上,每种颜色的笔写对应颜色的字,每个类都只有一个写字的职责。
总结
单一职责原则的重点在于职责的划分,通过职责的细化,体现高内聚的优点,让各个模块更加清晰,可以减少修改带来的影响。