源码分析七大设计原则之合成复用原则(Composite Reuse Principle)

本文深入探讨了合成复用原则,对比了继承复用的缺点,如破坏封装性和高耦合度,并强调了合成复用的优点,如保持封装性和降低耦合度。通过代码实例展示了如何避免过度依赖基类,以及如何通过合成和聚合来提高代码的灵活性和可维护性。同时,文章提醒在使用继承时需谨慎,遵循里氏替换原则。
摘要由CSDN通过智能技术生成

源码分析之七大设计原则

一、合成复用原则(Composite Reuse Principle)

定义:就是说要尽量的使用合成和聚合,而不是继承关系达到复用的目的
该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的

二、合成复用原则的重要性
通常类的复用分为继承复用和合成复用两种,继承复用虽然简单易实现,但它也存在诸多缺点

1、继承复用破坏了类的封装性。因为继承会将基类的实现细节暴露给派生类,基类对派生类是透明的,所以这种复用又称为 “白箱” 复用
2、派生类与基类的耦合度高。基类的实现的任何改变都会导致派生类的实现发生变化,这不利于类的扩展与维护
3、它限制了复用的灵活性。从基类继承而来的实现是静态的,在编译时已经定义,所以运行时不可能发生变化
4、当复用派生类的时候,如果继承下来的实现不适合解决新的问题,则基类必须重写或者被其它更适合的类所替换,这种依赖关系限制了灵活性,最终限制了复用性

采用合成复用时,可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能,它有诸多优点

1、维持了类的封装性。因为成分对象的内部细节是新对象看不见的,所以这种复用又称为 “黑箱” 复用
2、新旧类之间的耦合度低。这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口
3、复用的灵活性高。这种复用可以在运行时动态进行,新对象可以动态地将新的责任委派到合适的对象
4、每一个新的类可以将焦点集中在一个任务上

当然合成复用有一定缺陷(再好的东西也会有一定的缺陷),通过这种方式复用建造的系统会有较多的对象需要管理
三、源码演练
需求: 制作一个集合,要求该集合能记录曾经添加过多少个元素

反例代码 v1 版本

class MySet extends HashSet {
   
    private int count = 0;
	
    public boolean add(Object obj) {
   
        count++;
        return super.add(obj);
    }
	
    @Override
    public boolean addAll(Collection c) {
   
        count += c.size();
        return super.addAll(c);
    }
	
    public int getCount() {
   
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值