OOD沉思录 --- 类和对象的关系 --- 使用关系
2015-10-25 21:13
330 查看
使用关系
对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案
方案一:
A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB()
如汽车可以包含车轮。
如果汽车需要加油,那么就需要调用"加油站B.加油()"
[cpp] view plaincopyprint?
class 汽车
{
加油站 m_加油站;
加油(...)
{
//调用某加油站的加油方法
m_加油站.加油();
}
}
那么关键问题在于,汽车如何知道加油站X?
如果让汽车包含加油站,肯定不合适(太土豪了,呵呵),那么还有以下5种方案:
方案二: 通过形参将加油站传递给调用的方法,那么调用形式就是“加油站.加油()",那么汽车的定义则如下
[cpp] view plaincopyprint?
class 汽车
{
加油(加油站 X)
{
X.加油();
}
}
方案三:
通过一个第三方类来获得加油站,如地图类,则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站 X=地图.查找一个加油站();
X.加油();
}
}
方案四:
全世界只有一个加油站,那么所有的汽车都到这里来加油,则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站.TheInstance.加油();
}
}
这种情况就是单件模式的例子,还记得它吗?
方案五:
对款爷来说,随时修一个加油站,加完油就推平,这种情况在大部分领域行不通(代价太高),但是在软件领域可以(因为代价很低)
这种情况下,汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站 X=new 加油站();
X.加油();
delete X;
}
}
方案六:
汽车制造商在汽车的玻璃上明确标注了,此车只能在名叫"XX加油站",则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
string 加油站名="XX加油站";
加油()
{
加油站 X=企业黄页.查找(加油站名);
X.加油();
}
}
这种方案,在有的地方叫弱引用,汽车并不直接包含加油站,但是包含加油站的一个标示
对象A的方法MethodA使用了B的方法MethodB,则表示A对B存在使用关系 使用关系的最关键问题在于,A如何找到B,存在6种方案
方案一:
A包含了B,B作为一个成员定义在A的类中,那么在MethodA中可以直接调用B.MethodB()
如汽车可以包含车轮。
如果汽车需要加油,那么就需要调用"加油站B.加油()"
[cpp] view plaincopyprint?
class 汽车
{
加油站 m_加油站;
加油(...)
{
//调用某加油站的加油方法
m_加油站.加油();
}
}
那么关键问题在于,汽车如何知道加油站X?
如果让汽车包含加油站,肯定不合适(太土豪了,呵呵),那么还有以下5种方案:
方案二: 通过形参将加油站传递给调用的方法,那么调用形式就是“加油站.加油()",那么汽车的定义则如下
[cpp] view plaincopyprint?
class 汽车
{
加油(加油站 X)
{
X.加油();
}
}
方案三:
通过一个第三方类来获得加油站,如地图类,则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站 X=地图.查找一个加油站();
X.加油();
}
}
方案四:
全世界只有一个加油站,那么所有的汽车都到这里来加油,则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站.TheInstance.加油();
}
}
这种情况就是单件模式的例子,还记得它吗?
方案五:
对款爷来说,随时修一个加油站,加完油就推平,这种情况在大部分领域行不通(代价太高),但是在软件领域可以(因为代价很低)
这种情况下,汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
加油()
{
加油站 X=new 加油站();
X.加油();
delete X;
}
}
方案六:
汽车制造商在汽车的玻璃上明确标注了,此车只能在名叫"XX加油站",则汽车的定义如下:
[cpp] view plaincopyprint?
class 汽车
{
string 加油站名="XX加油站";
加油()
{
加油站 X=企业黄页.查找(加油站名);
X.加油();
}
}
这种方案,在有的地方叫弱引用,汽车并不直接包含加油站,但是包含加油站的一个标示
相关文章推荐
- 左右Cwnd::Create()功能出现afxwin1.inl line:21错误的解决方案
- Spark Streaming:初步了解
- MapReduce_Hadoop入门简介
- 适合自动化测试的场景
- 三角形拆分平面
- 生成全排序算法
- linux脚本后台记录top命令信息
- 自动化测试的优点
- 书中的银行,我们一起奋斗的C#,只因乐在其中~
- 不用打开Eclipse就可以执行的命令
- 动手动脑(补)
- QTTabBar v1035
- 【洛谷 P2656】采蘑菇
- 揭秘全美第一黑客组织Anonymous(匿名者)的装备库
- Eclipse使用技巧及个性化设计
- Dyslexic Gollum
- Coherence企业级缓存
- 蓝懿ios 技术内容和心得 10.25
- 编译原理:第八节
- css个人随笔,适合新手总结整理