对类对象之间的各种关系的重新理解

对Object Composition的重新理解

Object Composition 就是我们常看到的对象组合, 表示...is a part of 的关系, 组合关系的对象具有相同的生命周期,同生死,共存在, 其比聚合有更强的关联关系.

从代码实现角度: 往往是整体类(Composition Class)将部分类(Part Class)作为私有成员变量, 很显然当整体类对象消亡之时, 作为私有成员的部分类对象随之消亡.

代码实现如下:

   public class PartClass
    {
        public void DoSomeWork()
        {
            Console.WriteLine("Part Object is doing some works!");
        }
    }


    public class CompositionClass
    {
        private PartClass partObject;   //通过私有成员变量,持有对部分类对象的控制权
        public CompositionClass()
        {
            partObject = new PartClass();
        }

        public void DoSomeWork()
        {
            partObject.DoSomeWork();
        }

        public void DoOtherThings()
        {
            Console.Write("Composition Object is doing other things!");
        }

    }

 

然而,有时候通过继承(Inheritance) 机制也可以达到同样的效果 ,就是从Part Class 再派生一个类,实现如下:

    public class DerivedClass : PartClass
    {
        public void DoOtherThing()
        {
            Console.WriteLine("Do Other things");
        }
    }

    那么通过派生类对象来使用Part Class对象的方法属性,似乎也可以达到和组合相同的效果,那为什么GOF要推荐Object Composition的做法呢?

(注:OOD的第二个原则是: Favor Object Composition over class inheritance)

 

未完待续....

posted @ 2012-02-23 09:40  Power Developer  阅读(166)  评论(0编辑  收藏  举报