ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

聊聊继承、组合、聚合和相识

2022-05-20 03:32:11  阅读:76  来源: 互联网

标签:聚合 委托 组合 对象 相识 复用 继承 聊聊 请求


  类继承和对象组合是面向对象系统中功能复用的两种常用技术。

  类继承:根据其他类的实现来定义一个类的实现,生成子类,又称白箱复用;

  对象组合:新的更复杂的功能可以通过组装或组合对象来获得,要求被组合的对象具有良好定义的接口,又称黑箱复用。

  注意,这里的黑箱和白箱是相对可视性而言的,即,在继承方式中,父类的内部细节对子类可见,而在组合的复用方式里,对象的内部细节是不可见的。

  继承:

  • 优点:在编译时刻静态定义的,且可直接使用;
  • 缺点:无法在运行时刻改变从父类继承的实现,父子类之间紧依赖,破坏封装性。

  组合:

  • 优点:运行时刻动态定义,(由于对象只能通过接口访问),不破坏封装性;
  • 缺点:接口定义需详细严格。

  相对而言,组合更为理想,面向对象设计一大原则是:优先使用对象组合,而不是类继承。

  接下来我们来聊聊委托。委托是组合方法的一种,它使得组合具有与继承同样的复用能力。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者,类似于子类将请求交予父类处理,而使用继承时,被继承的操作总能引用接受请求的对象,委托中,接受请求的对象将自己传给被委托者(代理人),使得被委托的操作可以引用接受请求的对象,举例而言:

  上图中,Window类保存一个Rectangle类的实例变量rectangle来代理Rectangle类的特定操作,此时,如果我们访问了Window类实例对象window,并希望求其面积Area(),我们将该操作委托给其代理者rectangle,由它处理该操作。由于需要引用接受请求的对象,我们还需要将window实例对象通过传参方式传给rectangle,使其在Rectangle类中的操作可以引用window对象。

  聚合:一个对象拥有另一个对象或对另一个对象负责,一般称一个对象包含另一个对象或者是另一个对象的一部分。聚合意味着聚合对象和其所有者具有相同的生命周期。

  相识:一个对象仅仅知道另一个对象,又称关联或引用,是一种比聚合弱的关系,标识松散耦合。

标签:聚合,委托,组合,对象,相识,复用,继承,聊聊,请求
来源: https://www.cnblogs.com/chinakevin/p/16290965.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有