几个OOD概念

Composition vs. Aggregation

Composition和Aggregation都是”包含”的关系 (part of, made up of) ,不同的是生命周期。对于Composition, Owner负责创建和释放。 而Aggregation, Owner不负责创建和释放,而是从外面传过来的。UML表示如下:

代码例子如下:

class AggregationC
{

};

class CompositionC
{

};


class OwnerC
{
public:
   OwnerC(AggregationC* iAggreation):mAggreation(iAggreation) {mComposition = new CompositionC();}
   ~OwnerC() {delete mComposition; mComposition = nullptr;}
private:
   AggregationC* mAggreation;
   CompositionC* mComposition;
};

在面向对象中,用的最多的是class inheritance 和object composition. 要区分的是has a 和 is a。 具体情况要具体分析。有经验的都知道能用composition就用composition。原因很简单,面向对象最主要的是封装,用我自己的话说就是把整个系统打散,然后组装。这就是为什么常说“inheritance breaks encapsulation”。具体面向对象的设计时,你首先考虑的微观,而不是整个系统是怎么运行的。

Delegation

Delegation 是用composition来代替inheritance用于降低对象之间的耦合。例子:有一个娃娃玩具,能播放不同类型的声音。这时候用delegation就能降低耦合和为将来改动做准备。

 

是不是像strategy pattern. 其实就是。

posted on 2018-03-08 10:50  荷树栋  阅读(311)  评论(0)    收藏  举报

导航