使用关系

对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案

方案一:

A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB()

如汽车可以包含车轮。

如果汽车需要加油,那么就需要调用"加油站B.加油()"

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. 加油站 m_加油站;
  4. 加油(...)
  5. {
  6. //调用某加油站的加油方法
  7. m_加油站.加油();
  8. }
  9. }

那么关键问题在于,汽车如何知道加油站X?

   如果让汽车包含加油站,肯定不合适(太土豪了,呵呵),那么还有以下5种方案:

方案二:       通过形参将加油站传递给调用的方法,那么调用形式就是“加油站.加油()",那么汽车的定义则如下

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. 加油(加油站 X)
  4. {
  5. X.加油();
  6. }
  7. }

方案三:

通过一个第三方类来获得加油站,如地图类,则汽车的定义如下:

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. 加油()
  4. {
  5. 加油站 X=地图.查找一个加油站();
  6. X.加油();
  7. }
  8. }

方案四:

全世界只有一个加油站,那么所有的汽车都到这里来加油,则汽车的定义如下:

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. 加油()
  4. {
  5. 加油站.TheInstance.加油();
  6. }
  7. }

这种情况就是单件模式的例子,还记得它吗?

方案五:

对款爷来说,随时修一个加油站,加完油就推平,这种情况在大部分领域行不通(代价太高),但是在软件领域可以(因为代价很低)

这种情况下,汽车的定义如下:

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. 加油()
  4. {
  5. 加油站 X=new 加油站();
  6. X.加油();
  7. delete X;
  8. }
  9. }

方案六:

汽车制造商在汽车的玻璃上明确标注了,此车只能在名叫"XX加油站",则汽车的定义如下:

[cpp] view plaincopyprint?
  1. class 汽车
  2. {
  3. string 加油站名="XX加油站";
  4. 加油()
  5. {
  6. 加油站 X=企业黄页.查找(加油站名);
  7. X.加油();
  8. }
  9. }

这种方案,在有的地方叫弱引用,汽车并不直接包含加油站,但是包含加油站的一个标示

转载于:https://www.cnblogs.com/stst/p/4909620.html

OOD沉思录 --- 类和对象的关系 --- 使用关系相关推荐

  1. 《软件开发沉思录》之对象健身操

    2019独角兽企业重金招聘Python工程师标准>>> 最近看了一部分<软件开发沉思录>, 感觉里面的"对象健康操"还是蛮有意思的,在这记录下,希望以 ...

  2. 类和对象的定义和关系

    1.面向过程: POP(procedure oriented Programming)     c语言   汇编语言     面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现, ...

  3. 是什么事类,什么是对象,类和对象之间有什么关系?

    什么是类 类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类 ...

  4. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  5. 类和对象、实例的关系理解

    类可以理解为一种类型,对象是类中的一种实例.用类创建对象的过程叫做实例化.所以实例和类基本就是同一个概念.最常见的举例是:类Class:鸟 类的方法(函数):(鸟)会飞 类的属性(变量):爪子,翅膀实 ...

  6. 不能将brassplus类型的值分配到brass类的实体_Java 基础 - 类与对象

    类.对象和引用的关系 类和对象的关系 类是对象的模版,对象是类的一个实例,一个类可以有很多对象 一个Java程序中类名相同的类只能有一个,也就是类型不会重名 一个对象只能根据一个类来创建 引用和类以及 ...

  7. Java 入门知识学习笔记 (类和对象)

    一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实 ...

  8. php类与对象的基本概念

    php面向对象设计 对象相比数组的优点:不仅可以存储多个数据,还可以将函数存在对象中 对象的三大特性:封装.继承.多态 面向对象编程(object oriented programming 即oop) ...

  9. 面向对象-类和对象、构造方法、封装

    目录 面向对象 一.类和对象 1.定义 2.关系 3.类的组成 4.创建对象的格式 5.使用对象成员变量的格式 6.使用对象成员方法的格式 二.对象内存图 1.单个对象内存图 2.两个对象内存图(方法 ...

最新文章

  1. 2022-2028年中国电商物流行业投资分析及前景预测报告
  2. git submodule 使用场景汇总
  3. 别再打字聊bug了,GitHub支持“视频留言”!手机也可以的那种
  4. mysql的所有权限
  5. 使用OpenCV进行相机标定
  6. java更改背景_java – 使用jquery更改menue的背景颜色
  7. Mybatis的缓存机制Cache
  8. java 注解 target_详解JDK 5 Annotation 注解之@Target的用法
  9. CryptoQuant CEO:OKEx暂停提款对比特币价格影响不大
  10. lisp如何绘制梯形_建筑考研 | 如何用数据库思维拓宽设计思路?(以清华考研快题为例)...
  11. PostgreSQL 之 CREATE FUNCTION
  12. NERO9注册机使用
  13. idea 格式化代码怎么才能不格式化代码注释?
  14. ios safari 描述文件 跳转到_iOS系统在线下载安装ipa文件,以及跳转描述文件信任证书的实现...
  15. FYI | Brain-Art Competition 2018 开始投稿了
  16. 计算机系统相机怎么卸载,如何卸载摄像头驱动
  17. 使用beautiful soup解析xml
  18. 打造“沉浸式体验”展厅 智能讲解机器人云帆演绎新玩法
  19. S@Kura的PHP进阶之路(一)
  20. picker插件 vue 移动端_基于 vue 的 picker 组件 vue-awesome-picker

热门文章

  1. datalist,Repeater和Gridview的区别分析
  2. Android中的Selector的用法
  3. JS代码的window.location属性详解
  4. WDF驱动中KMDF与UMDF区别
  5. hadoop程序运行
  6. lua中的魔法字符转义问题
  7. CPU中的主要寄存器:有六类寄存器:指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、数据寄存器(DR)、累加寄存器(AC)、程序状态字寄存器(PSW)
  8. 指针和数组的区别是什么?
  9. 面向对象,面向过程编程
  10. 九度OJ—题目1032:ZOJ