2019独角兽企业重金招聘Python工程师标准>>>

合成复用原则: 尽量使用对象组合, 而不是继承来达到复用的目的.

合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象, 使之成为新对象的一部分; 新对象通过委派调用已有对象的方法达到复用的目的. 简言之: 复用时要尽量通过组合/聚合关系(关联关系), 少用继承.

在面向对象设计中, 可以通过两种方法在不同的环境中复用已有的设计和实现, 既*通过组合/聚合关系或者通过继承关系, 但首先应该考虑组合/聚合, *组合/聚合可以使系统更加灵活, 降低类与类之间的耦合度, 一个类的变化对其它类造成的影响较少; 其次才考虑继承关系, 在继承时, 要严格遵循里氏代换原则, 有效使用继承会有助于对问题的理解, 降低复杂度, 而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度, 因此要慎重使用继承复合.

通过继承来进行复用的主要问题在于继承复用会破坏系统的封装性,因为继承会将基类的实现细节暴露给子类,由于基类的内部细节通常对子类来说是可见的,所以这种复用又称“白箱”复用,如果基类发生改变,那么子类的实现也不得不发生改变;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;而且继承只能在有限的环境中使用(如类没有声明为不能被继承)。

由于组合或聚合关系可以将已有的对象(成员对象)纳入到新对象中, 使之成为新对象的一部分, 因此新对象可以调用已有对象的功能, 这杨作可以使得成员对象内部实现细节对于新对象不可见, 所以这种复用又称为"黑箱"复用, 相对继承关系来说, 耦合度降低, 成员对象的变化对新对象影响不大, 可以在新对象中根据实际需要有选择的调用成员对象的操作; 合成复合可以在运行时动态进行, 新对象可以动态的引用与成员对象类型相同的其他对象.

一般而言, 如果两个类之间是 "Has-A" 的关系应该使用组合/聚合; 如果是 "Is-A" 关系可以使用继承. "Is-A" 是严格的分类学意义上的一个定义, 意思是一个类是另一个类的"一种"; "Has-A" 表示某一个角色具有某一项职责.

详细示例请参考原文:

Reference: http://blog.csdn.net/lovelion/article/details/7563441

转载于:https://my.oschina.net/whforever/blog/787002

设计模式-合成复用原则相关推荐

  1. 设计模式-合成复用原则-》面向对象设计原则

    合成复用原则是面向对象设计原则的 7 条原则中剩下的最后一条,下面我们将对其进行详细地介绍. 合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚 ...

  2. [设计模式]合成复用原则

    合成复用原则:继承和组合,优先使用组合. 这样写,每开一种车,就要弄一个新的Person类. 代码如下: #include <iostream> using namespace std;c ...

  3. 细说设计模式七大原则(7):合成复用原则

    基本介绍 英文名:Composite Reuse Principle,CRP 定义:软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现 问题由来:通常类的复用分为继承复 ...

  4. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

  5. 【设计模式】软件设计七大原则 ( 合成复用原则 | 代码示例 )

    文章目录 一.合成复用原则简介 二.合成复用 与 继承复用 优缺点 三.合成复用原则代码示例 1.继承复用代码示例 2.合成复用代码示例 一.合成复用原则简介 合成复用原则 又称为 组合复用原则 , ...

  6. 设计模式的七大设计原则:其七:合成复用原则

    合成复用原则(Composite Reuse Principle) 基本介绍: 原则是尽量使用合成/聚合的方式,而不是使用继承. 设计原则核心思想: 1.找出应用中可能需要变化之处,把它们独立出来,不 ...

  7. 【设计模式】设计原则:CARP 合成复用原则

    合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的.可以 ...

  8. 【设计模式】合成复用原则

    合成复用原则是指:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现. 设想这样一个案例:加入要开车,有几种不同的车型,使用继承的话,代码如下 class AbstractCar { ...

  9. 4.7 合成复用原则

    一. 合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle, ...

最新文章

  1. 2016年日本信息安全市场规模分析
  2. jboss5 启动时报HsqlException:length must be specified in type definition:VARBINARY错误
  3. Java中break、Continue、reutrn总结
  4. Word2Vec小心得
  5. matlab零相移滤波,零相移数字滤波器边界效应讨论(附程序与参考文献)
  6. C++STL笔记(六):list详解
  7. python的特性注定了代码无法保密_python 基础
  8. 中国内窥镜干燥存放柜市场趋势报告、技术动态创新及市场预测
  9. 支持Flash和JavaScript的图表控件FusionWidgets
  10. 如何让ul的符号隐藏_亚马逊关键词大师,那些你不知道的隐藏keywords操作方法(干货)...
  11. Win11、Linux 双系统安装方法
  12. 基于auto.js的安卓抢购软件---淘宝抢购小助手(不完善,仅供参考)
  13. BF-9500警用(PDT)数字集群通信系统
  14. docker部署分布式应用_Docker服务,堆栈和分布式应用程序捆绑
  15. _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringEv
  16. CppCheck的使用
  17. python语言的优缺点论文_GAN 论文大汇总
  18. 什么是机器学习(ML)
  19. RabbitMQ入门及笔记
  20. VIBE君,放过MOTO吧

热门文章

  1. a和a数值大小 计算机,Java求s=a+aa+aaa+aaaa+aa...a的值
  2. java日期比较大小_java日期大小比较
  3. java+yeild+sleep_Java并发编程--yield sleep和wait的区别
  4. Mysql常用词汇_mysql 数据库常用单词
  5. python数组对应元素相乘_python的几种矩阵相乘的公式详解
  6. 唯一索引和普通索引的选择
  7. Redis初学:7(Set类型)
  8. Mybatis复习笔记:4
  9. c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能
  10. 川崎机器人示教盒维修_专业维修丹阳市KUKA库卡KRC2库卡C4主板维修{苏州罗韦维修}...