Chinaunix首页 | 论坛 | 博客
  • 博客访问: 372830
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:35:12

        类和对象的关系有:使用关系,包含关系,和关联关系;类和类之间的关系有:继承关系;那么什么是使用关系呢? 使用关系就是一个类的对象向另一个类的对象发送消息(即调用它的方法)。本文就描述一下使用关系的六种方法,其实包含关系也是使用关系的一种,所以应该包含在使用关系中。

         如果一个对象要向另一个对象发送消息,那么这个对象必须知道另一个对象的名字。 让我们来思考一个问题:汽车和加油站的关系,汽车要加油必须知道加油站的名字,如果让汽车包含加油站,那显然不合理,那么汽车如何知道加油站的名字呢?除了包含关系,还有5种实现方法。

1.  通过消息的方法。
    想象一下一个更高层次的对象向轿车发送了一个消息,其中的参数包含加油站的名字,比如汽车对象有一个方法: AddGas(gasStationInfo& gasstation, int money); 上层对象调用它,将加油站的信息当作参数发给汽车对象。

2. 查询另一个类(地图类),找到合适的加油站(或许是离的最近的加油站)
    这种方法假设有另一个地图类,保存着加油站的分布位置,那么汽车根据自己的位置查询此类来获得和自己离的最近的加油站,然后去加油。当然这个只是暂时回避了问题(我们如何知道地图对象呢?)

3. 使用一个全局对象
    所有的汽车使用一个全局的加油站对象,这个实际是第一种方法的一个特例,因为全局对象可以认为是方法的一个隐式参数。

4. 随时创建型
    这种方法是为有钱人设计的,当汽车需要加油时,就停下车,在原地建一个加油站,然后在使用这个加油站。在离开时,再摧毁它。简单的说,就是在AddGas方法中,创建一个局部的加油站对象。

5. 包含引用型
   这种方法是在造车时,就指定了这个车使用哪个加油站,也就是说,车对象中一个指针(指向加油站),在创建车对象时,就指定了这个指针,让其指向一个指定的加油站对象。


  6.      最后一种也是最常用的就是包含关系。当然这个例子不适合这种方法,总不能让汽车包含一个加油站对象吧!所以来说另一个例子,就说一个DIALOD类,其中包含几个控件,比如包含一个ListCtrl,那么每次来自上层应用类的消息,有一部分都要转发给ListCtrl类来执行。比如要得到第三行的字符串,那么dialog对外有一个GetListStr(int nLine);而这个方法实现其实是调用listctrl对象的某一个方法。这就是包含,dialog对象包含listctrl对象。这种包含关系其实到处都用。

上述六种使用关系,各有优缺点,针对不同问题用不同的方法!!


本文参考文献:
             《OOD启思录》, 人民邮电出版社,作者: J.Riel
              《设计模式精解》 清华大学出版社,熊杰译。

             

--------------------next---------------------

阅读(126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~