作为一个组合设计如何可以不同于委托,在实施方面是否有任何区别。例如,下面的代码似乎在进行委派,因为用户不能访问组合对象(即“a”)而不使用b。因此,用户需要调用类b的接口,然后“类b”调用“类a”的相应接口进行委派。这有意义吗?组合与授权
Class A {
friend class B;
private:
A(){}; //dont want user to instantiate this class object since it wont sense without any context. Just like a room with no house.
void PrintStructure(){};
};
Class B{
public:
void PrintStructure(){a.PrintStructure();} //delegate
private:
A a; //composition
};
如果构图意味着在没有父类的上下文的情况下子不能存在,那么应该永远不允许用户创建组合类的对象?例如,我的雅致的例子是A类(朋友B类; private:A(){}; void PrintStructure(){}; };类B {public:void PrintStructure(){a.PrintStructure();} // delegate private:A a; //组合};现在B类具有类A.用户只能使用B类接口来改变A类行为,而B类应该将这些任务委托给A类函数。这个设计好吗? – 2010-01-26 03:01:21
@Frank:朋友类是实现这种关系的一种方式。他们不是我赞成的。一个更优雅的解决方案是让Room的构造函数需要House的一个实例,然后它成为它的“父”。 – cletus 2010-01-26 03:04:26
你如何在我的例子中编写类似的代码?此外,我不希望用户能够实例化A的对象,因为没有B的上下文对A进行任何操作都没有意义。 – 2010-01-26 03:12:49