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

原文链接:http://www.cnblogs.com/PowerDev/archive/2012/02/23/2364265.html

对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)

 

未完待续....

转载于:https://www.cnblogs.com/PowerDev/archive/2012/02/23/2364265.html

上一篇:c – 依赖倒置原则:试图理解


下一篇:Java – 接口实现中的方法名称冲突