🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
面向对象设计原则是一些通用的软件设计原则,用于指导软件设计人员开发高质量、可扩展、可维护的软件系统。这些原则的作用如下:
遵循面向对象设计原则可以帮助软件设计人员开发高质量、可扩展、可维护和重用的软件系统。
单一职责原则(Single Responsibility Principle,SRP)是指一个类或模块应该只有一个功能,且这个功能应该由这个类或模块完全封装起来。也就是说,一个类或模块只应该负责一项职责或功能。其作用是帮助程序员将系统分解为更小、更专注的部分,提高代码的可读性、可维护性和可扩展性,降低不同模块之间的耦合性,并且使得这些部分更加灵活和易于重用。
例如,一个负责存储用户数据的类应该只有存储用户数据的功能,而不应该包含其他的操作,如计算用户积分、发送邮件等,否则这个类就违反了单一职责原则,导致代码耦合度过高、可维护性和可扩展性降低。
遵循单一职责原则的好处有:
单一职责原则是面向对象设计中非常重要的一项原则,能够帮助程序员设计出更好的代码,从而提高软件的质量和可维护性。
public class Rectangle : Shape {
public int Height;
public int Width;
public int Area() {
return Width * Height;
}
public void Draw() {
Console.WriteLine("Draw Rectangle!");
}
}
Rectangle类为矩形类,继承自其抽象基类Shape,矩形类包含2个公开的属性和方法,Area方法计算矩形的面积,Draw方法绘制矩形,“计算”和“绘图”两种不同类型的操作耦合在同一个类中,不符合单一职责原则,以下是一个调用方可能的代码。
public class CalculatorShapeArea {
public void CalculateArea(Rectangle rectangle) {
var area = rectangle.Area();
}
}
public class DrawRectangle {
public void Draw(Rectangle rectangle) {
rectangle.Draw();
}
}
public enum DrawType {
None,
shadow
}
我们注意到调用方都是通过Rectangle的实例去调用矩形的Area和Draw方法,耦合程度高。当我们有一天准备更改Draw方法时(例如为Draw增加一个名为DrawType的enum参数,以决定是否在绘图时使用阴影效果),Rectangle类发生了变化,因为这个类存在2个引起它变化的因素,即“计算”和“绘图”。在实际开发过程中,Rectangle类可能是一个比较复杂的类,更改了Draw方法需要进行完整的回归测试,以确定更改是否影响到整个Rectangle类的正确性,所以这种更改带来的后果是严重的,其代价是昂贵的。以下给出一个解决方案以供参考:
public class Rectangle : Shape {
public int Height { get; set; }
public int Width { get; set; }
public int Area() {
return Width * Height;
}
}
public class RectangleDraw {
public void Draw(Rectangle rectangle) {
Console.WriteLine("Draw Rectangle!");
}
}
var rectangle = new Rectangle();
var area = rectangle.Area();
var rectangleDraw = new RectangleDraw();
rectangleDraw.Draw(rectangle);
将Draw方法重新通过RectangleDraw类封装,使“计算”和“绘图”分离。当我们需要为Draw方法增加参数时,我们只要更改RectangleDraw类的Draw方法即可,不会影响到Rectangle类,即只需要为RectangleDraw类做回归测试即可,降低原Rectangle类中方法的耦合程度,符合单一职责原则的要求。
单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性。如果遵循单一职责原则将有以下优点。