返回

设计模式的原则指南:单一职责原则与开放-封闭原则

见解分享

原则 1:单一职责原则

单一职责原则 (SRP) 规定,一个类或模块应该只有一个引起它变化的原因。这有助于提高代码的可维护性和可扩展性,因为它使得代码更容易理解和修改。

示例

假设我们有一个 User 类,该类负责处理用户相关的数据和行为。在这个类中,我们可能会包含一些方法,比如:

  • get_username(): 获取用户的名字
  • get_email(): 获取用户的电子邮件地址
  • is_active(): 检查用户是否处于活动状态
  • reset_password(): 重置用户的密码

从表面上看,这些方法似乎都是相关的,都与用户相关。但是,如果我们仔细观察,就会发现这些方法实际上是独立的,它们之间没有直接的联系。

例如,get_username() 方法只负责获取用户的名字,而 reset_password() 方法则负责重置用户的密码。这两个方法之间没有任何依赖关系,它们可以完全独立地工作。

如果我们把这些方法都放在同一个类中,那么这个类就会变得非常庞大且难以维护。当我们需要修改某个方法时,我们可能需要考虑其他方法的依赖关系,这会增加修改代码的难度。

因此,为了遵循单一职责原则,我们可以把这些方法拆分成多个独立的类或模块。这样,当我们需要修改某个方法时,我们只需要考虑这个方法本身,而不需要考虑其他方法的依赖关系。

原则 2:开放-封闭原则

开放-封闭原则 (OCP) 规定,软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭。这意味着,我们可以通过添加新的代码来扩展软件的功能,而不需要修改现有的代码。

示例

假设我们有一个 Order 类,该类负责处理订单相关的数据和行为。在这个类中,我们可能会包含一些方法,比如:

  • get_order_id(): 获取订单的 ID
  • get_total_price(): 获取订单的总价
  • add_item(item): 向订单中添加一项商品
  • remove_item(item): 从订单中删除一项商品

从表面上看,这些方法似乎都是相关的,都与订单相关。但是,如果我们仔细观察,就会发现这些方法实际上是独立的,它们之间没有直接的联系。

例如,get_order_id() 方法只负责获取订单的 ID,而 add_item() 方法则负责向订单中添加一项商品。这两个方法之间没有任何依赖关系,它们可以完全独立地工作。

如果我们把这些方法都放在同一个类中,那么这个类就会变得非常庞大且难以维护。当我们需要添加新的功能时,我们可能需要修改现有的代码,这会增加添加新功能的难度。

因此,为了遵循开放-封闭原则,我们可以把这些方法拆分成多个独立的类或模块。这样,当我们需要添加新的功能时,我们只需要添加新的代码,而不需要修改现有的代码。

结论

单一职责原则和开放-封闭原则都是设计模式中的重要原则,它们有助于提高代码的可维护性和可扩展性。通过遵循这些原则,我们可以编写出更灵活、更稳定、更易于扩展的代码。