它是包装器、委托还是代理

Is it a wrapper or delegate or agent?

本文关键字:代理 包装      更新时间:2023-10-16

我有一个类来完成任务

class A
{
public:
    void doSomething();
};

我有另一个类,其中包含指向A的指针,并通过A执行任务,还有其他成员,这不仅仅是一个皮条客(很抱歉在第1版中没有明确我的问题)

class B
{
public:
    void doSomething() { mA->doSomething(); }
    ...
private:
    A* mA;
    ...
};

如何调用B?包装、委托或代理?或者它们是相同的概念只是不同的名字?如何调用A,如委派?

更具体地说,在我的例子中,B在GUI级别,A在域逻辑级别。如何称呼这些?如果B有自己的数据,这些数据可以用来生成a?如何称呼这种关系?谢谢

B的含义无法从这个小代码片段中确定地推断出来。从结构上讲,这是一个类组合的例子,根据类B的用途,它可以用来制作包装器、装饰器、适配器、代理/代理等等。

如果B继承了A,那么它将是一个装饰器或包装器。如果B包含到A的隐式转换运算符,那么它将是代理或代理。如果B使用A来实现其他契约的行为,那么它将是一个适配器。但是,请注意,所有这些概念都比语言的"构造基元"(如继承和组合)级别更高,因此您需要在系统的其他类中更广泛地使用AB来决定它是哪一个

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

包装器与委托不同。包装器是一个类,用于出于某种原因将接口更改为对象,如在外观模式中。

您展示的是简单的包容——类似的代码可以用于实现上面的任何一种模式,或者其他一些模式。我们无法判断物体之间的关系,所以不能说这是某种特定的模式。

您已经被语义所包围。你有一个类恰好控制着另一个类——它真的意味着它的名字吗?

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

这是授权-让工作发生在它需要的地方。

请不要被"设计模式"所消耗