合成复用原则是指:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

设想这样一个案例:加入要开车,有几种不同的车型,使用继承的话,代码如下

class AbstractCar
{
public:virtual void run() = 0;
};//大众
class Volk :public AbstractCar
{
public:virtual void run(){cout << "大众车启动了" << endl;}
};
//拖拉机
class Tuolaji :public AbstractCar
{
public:virtual void run(){cout << "拖拉机启动了" << endl;}
};//某个人想开拖拉机
class Person1:public Tuolaji
{
public:void doufeng(){run();}
};//某个人想开大众
class Person2 :public Volk
{
public:void doufeng(){run();}
};//每一种具体情况都需要写一个类,而且这两个类 都是具体的,不符合针对抽象编程

这增加了类之间的耦合性,并且如果车型一直增加,那么继承也需要增加,代码冗余

使用合成复用原则,将车类作为一直属性 与 人类 组合起来。

//继承和组合 优先使用组合
class AbstractCar
{
public:virtual void run() = 0;
};//大众
class Volk :public AbstractCar
{
public:virtual void run(){cout << "大众车启动了" << endl;}
};
//拖拉机
class Tuolaji :public AbstractCar
{
public:virtual void run(){cout << "拖拉机启动了" << endl;}
};//可以使用组合,将车作为属性
class Person
{
public:void setCar(AbstractCar* car){this->car = car;}void doufeng(){this->car->run();//兜完风就销毁掉if (this->car != NULL){delete this->car;this->car = NULL;}}public:AbstractCar* car;
};void test02()
{Person* p = new Person;p->setCar(new Volk);          //开大众p->doufeng();p->setCar(new Tuolaji);p->doufeng();delete p;
}

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

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

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

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

    2019独角兽企业重金招聘Python工程师标准>>> 合成复用原则: 尽量使用对象组合, 而不是继承来达到复用的目的. 合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. 4.7 合成复用原则

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

最新文章

  1. Promise入门详解和基本用法 我来教你
  2. 回车与换行 ASCII
  3. Java生鲜电商平台-促销系统的架构设计与源码解析
  4. 换位思考的最高境界是换待遇,所以,换位思考就是空话!!!
  5. 连接查询_左连接/右连接/全连接的区别
  6. 知乎高赞:如果你是一个 Java 面试官,你会问哪些问题....
  7. input做成label效果
  8. Java — Map.keySet()、Map.put()、Map.get()【Map类、Set类】
  9. 知识点汇总【一】操作系统三十八问
  10. 函数式编程能否支持更高效的区块链基础设施?
  11. 一键关闭 openwrt路由器的led灯
  12. ajax后台重定向会返回什么_处理jquery ajax重定向
  13. python中存储坐标_利用python进行坐标提取以及筛选(文件操作的小应用)
  14. HTML和CSS面试题—整理过的48题,关注收藏,持续更新
  15. Oracle | awr报告分析
  16. plotly系列 | 绘制散点图组合箱线图(联合图)
  17. SPSS独立样本t检验结果分析
  18. 电脑桌面运维工程师考证
  19. 使用 LaTeX 绘制流程图
  20. 国产处理器兆芯可运行Windows,已试制出Intel i5级处理器

热门文章

  1. 14过去完成时 vs 现在完成时,过去完成时 vs 一般过去时 vs 过去将来时
  2. python3 自然语言处理_Python3NLTK-自然语言处理
  3. 微信小程序-地图实例
  4. 云渲染如何收费,云渲染哪个平台费用低?
  5. arduino+A4889+步进电机
  6. 红帽首席架构师:CentOS Stream 并非要革了 CentOS 的“命”
  7. 记一次解密微信聊天数据库并Python格式化处理XML
  8. 新人如何快速上手项目管理?
  9. chromium 安装flash-plugins 解决方案
  10. 基于佳点集的改进麻雀搜索算法