2

我有一堂课来做任务

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

我还有另一个类,其中包含一个指向A并通过它完成任务的类,A并且还有其他成员不仅仅是一个 pimpl(很抱歉在第一版中没有明确我的问题)

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

private:
    A* mA;
    ...
};

怎么打电话B?包装器、代表或代理?还是它们是相同的概念只是名称不同?如何调用A,如委托?

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

4

3 回答 3

2

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

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

于 2013-08-10T13:39:40.217 回答
1

委托是一个辅助对象——它允许您更改委托对象的行为而无需子类化。这是一种众所周知的设计模式。

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

您所展示的是简单的包含——这样的代码可用于实现上述任何一种模式,或其他东西。我们无法判断对象之间的关系是什么,所以不能说它是某种特定的模式。

于 2013-08-10T13:32:54.067 回答
0

你正在被语义所包围。你有一个类碰巧控制着另一个类——它真的意味着它的名字吗?

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

这就是授权——让工作在需要的地方进行。

请不要被“设计模式”所消耗

于 2013-08-10T13:43:45.473 回答