设计模式-单一职责原则

单一职责原则:(Single Responsibility Principle, SRP)是面向对象设计中的一个重要原则,它指的是一个类应该仅有一个导致其变化的原因,或者说一个类应该只有一个职责。

单一职责原则的核心要点:

明确职责:一个类应该专注于完成一项职责。如果一个类承担了过多的职责,就意味着它承担了过多的变化。当需求发生变化时,这个类可能需要同时因为多个原因而改变,这会导致代码复杂度增加,降低代码的可维护性。

降低耦合:当一个类只承担一项职责时,它的内部实现与其他类的耦合度就会降低。这样,当需求发生变化时,不需要修改过多的代码,系统的健壮性也会增强。

提高可读性和可维护性:类的职责越单一,它的代码就越简单,逻辑就越清晰。这样不仅便于理解和维护,还便于进行单元测试。

案例
假设我们正在开发一个简单的在线购物系统,其中有一个 Order 类,最初它的职责是处理订单的基本操作。随着项目的进行,Order 类逐渐承担了更多的职责,包括:

订单的创建和管理。
计算订单的总金额。
生成订单的报告。
处理订单的打印。
初始实现
以下是没有遵循单一职责原则的 Order 类的实现:

public class Order
{
    public int Id { get; set; }
    public List<string> Items { get; set; }
    public double TotalAmount { get; set; }

    public void AddItem(string item)
    {
        Items.Add(item);
    }

    public void CalculateTotalAmount()
    {
        // 计算订单总金额的逻辑
    }

    public void GenerateReport()
    {
        // 生成订单报告的逻辑
    }

    public void PrintOrder()
    {
        // 打印订单的逻辑
    }
}

存在的问题
高耦合:Order 类承担了太多职责。任何一个职责的变化都可能影响到其他职责,导致代码难以维护和扩展。
低可读性:因为类的功能太多,代码变得复杂,难以理解。
难以测试:由于 Order 类涉及多个不同的职责,对其进行单元测试会变得更加复杂。
改进方案
为了遵循单一职责原则,我们可以将 Order 类的各个职责分离到不同的类中:

Order 类:只负责订单的创建和管理。
OrderCalculator 类:负责订单金额的计算。
OrderReportGenerator 类:负责生成订单的报告。
OrderPrinter 类:负责订单的打印。
改进后的实现
 

// 订单类,只负责订单的基本操作
public class Order
{
    public int Id { get; set; }
    public List<string> Items { get; set; } = new List<string>();
    public double TotalAmount { get; set; }

    public void AddItem(string item)
    {
        Items.Add(item);
    }
}

// 订单金额计算类
public class OrderCalculator
{
    public double CalculateTotalAmount(Order order)
    {
        // 计算订单总金额的逻辑
        return 0; // 假设的返回值
    }
}

// 订单报告生成类
public class OrderReportGenerator
{
    public void GenerateReport(Order order)
    {
        // 生成订单报告的逻辑
    }
}

// 订单打印类
public class OrderPrinter
{
    public void PrintOrder(Order order)
    {
        // 打印订单的逻辑
    }
}

改进后的优点
单一职责:每个类都专注于完成一种职责,代码的结构更加清晰。
降低耦合:各个类之间的耦合度降低,修改某个类的逻辑不会影响到其他类。
提高可维护性:代码更容易理解和维护,因为每个类都只做一件事。
更容易测试:由于每个类的功能单一,单元测试变得更简单。
总结
通过遵循单一职责原则,我们将一个复杂的 Order 类拆分为多个职责单一的小类,使系统变得更易于维护、扩展和测试。这就是单一职责原则在实际开发中的典型应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芊泽散人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值