我有一个班级来完成任务
class A
{
public:
void doSomething();
};
我还有另一个包含A
指针的类,并通过A
完成任务,并且其他成员不仅仅是一个pimpl(很遗憾在第1版中没有明白我的问题) )
class B
{
public:
void doSomething() { mA->doSomething(); }
...
private:
A* mA;
...
};
如何致电B
?包装,代理或代理?或者他们是相同的概念只是不同的名称?如何调用A
,如委托?
为了使其更具体,在我的例子中,B处于GUI级别,A处于域逻辑级别。怎么称呼这些?如果B有自己的数据并且数据可用于生成A?如何称呼这种关系?感谢。
答案 0 :(得分:1)
委托是一个辅助对象 - 它允许您在不进行子类化的情况下更改委派对象的行为。这是一个众所周知的设计模式。
包装器与委托不同。 W wrapper是一个用于根据某种原因将接口更改为对象的类,如façade模式。
你所展示的是简单的遏制 - 像这样的代码可用于实现上述任何一种模式,或其他。我们不能告诉对象之间的关系,所以不能说它是某种特定的模式。
答案 1 :(得分:1)
B
的含义不能从这个小代码片段中肯定地推断出来。从结构上讲,这是类composition的一种情况,它可以用来创建包装器,装饰器,适配器,代理/代理等,具体取决于类B
的目的。
如果B
继承了A
,它将是装饰器或包装器。如果B
包含A
的隐式转换运算符,则它将是代理或代理。如果B
使用A
来实现某些其他合同的行为,那么它将是一个适配器。但请注意,所有这些概念都比语言的“构造原语”更高级别,例如继承和组合,因此您需要更广泛的使用上下文A
和B
以及其他类你的系统决定它是哪一个。
答案 2 :(得分:0)
你正在被语义所包裹。你有一个碰巧控制另一个类的类 - 它真的意味着什么叫它吗?
类似于拥有start
方法的上传器类以及具有相同uploaderQueue
方法的start
类。队列管理文件并在需要时调用其upload
方法。
这是委托 - 让工作在需要的地方进行。
请不要被'设计模式'消费