深入解析合成复用原则:代码复用与设计模式实践

109 阅读1分钟

深入解析合成复用原则:代码复用与设计模式实践

1. 合成复用原则简介

合成复用原则(Composite Reuse Principle, CRP)是面向对象设计原则之一,强调通过组合/聚合关系实现代码复用,而非继承关系。其核心思想是:尽量使用对象组合,而不是继承来达到复用的目的。

2. 为什么选择合成复用原则?

继承虽然简单直接,但会带来以下问题:

  • 破坏封装性:子类依赖父类实现细节。
  • 灵活性差:父类变化可能影响所有子类。
  • 多重继承问题:某些语言不支持多重继承。

组合/聚合则更灵活,降低了类之间的耦合度。

3. 代码示例

示例1:继承 vs 组合

// 继承方式
class Bird {
    void fly() { System.out.println("Flying"); }
}
class Penguin extends Bird {
    // 企鹅不会飞,但继承后仍需实现fly方法
}

// 组合方式
interface Flyable { void fly(); }
class Bird implements Flyable {
    public void fly() { System.out.println("Flying"); }
}
class Penguin {
    private Flyable flyBehavior;
    Penguin(Flyable flyBehavior) { this.flyBehavior = flyBehavior; }
}

示例2:设计模式中的应用(策略模式)

interface PaymentStrategy {
    void pay(int amount);
}
class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) { System.out.println("Paid " + amount + " via Credit Card"); }
}
class ShoppingCart {
    private PaymentStrategy paymentStrategy;
    void setPaymentStrategy(PaymentStrategy strategy) { this.paymentStrategy = strategy; }
    void checkout(int amount) { paymentStrategy.pay(amount); }
}

4. 应用场景:电商系统

在电商系统中,订单支付方式多样(信用卡、支付宝、微信支付)。通过组合方式,可以灵活切换支付策略,而无需修改订单类代码。

5. 总结

合成复用原则通过组合/聚合提高了代码的灵活性和可维护性,是设计模式中的重要基础。