微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GoF之组合/聚合复用原则

在学习UML的时候就接触过组合/聚合的概念,它们是整体-部分的关系,只是关系的强弱不同,聚合是一种弱的”拥有“关系;组合是一种强的”拥有“关系。经过下面的一些介绍,对于组合/聚合复用原则有个认识,并且知道它们的使用场合。

组合/聚合复用原则Composition/AggregationPrinciple

该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。

其实这里最终要的地方就是区分“has-a”和“is-a”的区别。继承虽好,可以实现父类代码的复用,但是相对于合成和聚合,继承的缺点在于:父类方法全部暴露给子类。父类如果发生变化,子类也得发生变化。聚合的复用的时候就对另外的类依赖的比较的少。。

复用

优点

缺点

合成/聚合

1、新对象存取成员对象的唯一方法是通过成员对象的接口;

2、是黑箱复用,因为成员对象的内部细节是新对象所看不见的;

这种复用支持包装;

3、复用所需的依赖较少;

4、每一个新的类可以将焦点集中在一个任务上;

5、可以在运行时动态进行,新对象可以使用合成/聚合关系将新的责任委派到合适的对象。

通过这种方式复用建造的系统会有较多的对象需要管理

继承

1、新的实现较为容易,因为基类的大部分功能可以通过继承关系自动进入派生类;

2修改或扩展,继承而来的实现较为容易。

1、继承复用破坏包装,因为继承将基类的实现细节暴露给派生类,这种复用也称为白箱复用;

2、如果基类的实现发生改变,那么派生类的实现也不得不发生改变;

3、从基类继承而来的实现是静态的,不可能在运行时发生改变,不够灵活。

对比两种关系的优缺点,并不能说明哪一种好哪一种不好,只能在实际情况中,设计人员进行判断到底使用哪一种耦合关系。


这是第五个原则了,后面是一个法则,而且我会有比较有意思的例子说明,敬请期待。。。

原文地址:https://www.jb51.cc/javaschema/285351.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐