对类对象之间的各种关系的重新理解
对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)
未完待续....