它是包装或代理还是代理?

时间:2013-08-10 12:58:15

标签: c++

我有一个班级来完成任务

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?如何称呼这种关系?感谢。

3 个答案:

答案 0 :(得分:1)

委托是一个辅助对象 - 它允许您在不进行子类化的情况下更改委派对象的行为。这是一个众所周知的设计模式。

包装器与委托不同。 W wrapper是一个用于根据某种原因将接口更改为对象的类,如façade模式。

你所展示的是简单的遏制 - 像这样的代码可用于实现上述任何一种模式,或其他。我们不能告诉对象之间的关系,所以不能说它是某种特定的模式。

答案 1 :(得分:1)

B的含义不能从这个小代码片段中肯定地推断出来。从结构上讲,这是类composition的一种情况,它可以用来创建包装器,装饰器,适配器,代理/代理等,具体取决于类B的目的。

如果B继承了A,它将是装饰器或包装器。如果B包含A的隐式转换运算符,则它将是代理或代理。如果B使用A来实现某些其他合同的行为,那么它将是一个适配器。但请注意,所有这些概念都比语言的“构造原语”更高级别,例如继承和组合,因此您需要更广泛的使用上下文AB以及其他类你的系统决定它是哪一个。

答案 2 :(得分:0)

你正在被语义所包裹。你有一个碰巧控制另一个类的类 - 它真的意味着什么叫它吗?

类似于拥有start方法的上传器类以及具有相同uploaderQueue方法的start类。队列管理文件并在需要时调用其upload方法。

这是委托 - 让工作在需要的地方进行。

请不要被'设计模式'消费