深入解析合成复用原则:代码复用与设计模式实践
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. 总结
合成复用原则通过组合/聚合提高了代码的灵活性和可维护性,是设计模式中的重要基础。