它是包装器、委托还是代理
Is it a wrapper or delegate or agent?
我有一个类来完成任务
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
来实现其他契约的行为,那么它将是一个适配器。但是,请注意,所有这些概念都比语言的"构造基元"(如继承和组合)级别更高,因此您需要在系统的其他类中更广泛地使用A
和B
来决定它是哪一个
委托是一个辅助对象——它允许您在不进行子类化的情况下更改委托对象的行为。这是一种众所周知的设计模式。
包装器与委托不同。包装器是一个类,用于出于某种原因将接口更改为对象,如在外观模式中。
您展示的是简单的包容——类似的代码可以用于实现上面的任何一种模式,或者其他一些模式。我们无法判断物体之间的关系,所以不能说这是某种特定的模式。
您已经被语义所包围。你有一个类恰好控制着另一个类——它真的意味着它的名字吗?
类似于具有start
方法的上传器类,以及具有相同start
方法的uploaderQueue
类。队列管理文件,并在需要时调用它们的upload
方法。
这是授权-让工作发生在它需要的地方。
请不要被"设计模式"所消耗
- 代理对象的常量正确性
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 具有所表示类的相同构造函数签名的代理类模板
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 它是包装器、委托还是代理
- 代理包装类,运算符>链接
- 使用 SWIG 代理 C#->C++ 类包装器