2

タスクを実行するクラスがあります

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

そして、ポインタを含む別のクラスがありA、 を介してタスクを実行し、A単なるピンプルではない他のメンバーを持っています(第1版で私の質問を明確にしておらず申し訳ありません)

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

private:
    A* mA;
    ...
};

呼び方はB?ラッパー、デリゲート、またはエージェント? それとも、名前が違うだけで同じ概念ですか?AThe delegated のように を呼び出す方法は?

より具体的に言うと、私の場合、B は GUI レベルで、A はドメイン ロジック レベルです。これらの呼び方は?また、B に独自のデータがあり、そのデータを使用して A を生成できる場合は? この関係をどのように呼びますか? ありがとう。

4

3 に答える 3

2

の意味はB、この小さなコード スニペットから確実に推測することはできません。構造的には、これはクラス構成のケースであり、クラスの目的に応じて、ラッパー、デコレーター、アダプター、プロキシー/サロゲートなどを作成するために使用できますB

Binheritedの場合A、デコレータまたはラッパーになります。Bへの暗黙の変換演算子が含まれている場合A、それはサロゲートまたはプロキシになります。他のコントラクトの動作を実装するためにB使用される場合、それはアダプターになります。Aただし、これらの概念はすべて、継承や構成など、言語の「構築プリミティブ」よりも高レベルであるため、システムの他のクラスの使用コンテキストをより広く使用して、それがどれであるかを判断するA必要があることに注意してください。B

于 2013-08-10T13:39:40.217 に答える
1

デリゲートはヘルパー オブジェクトです。サブクラス化せずにデリゲート オブジェクトの動作を変更できます。おなじみのデザインパターンです。

ラッパーはデリゲートと同じではありません。Wラッパーは、ファサードパターンのように、何らかの理由でインターフェイスをオブジェクトに変更するために使用されるクラスです。

あなたが示しているのは単純な封じ込めです-そのようなコードは、上記のパターンのいずれか、または他の何かを実装するために使用できます。オブジェクト間の関係がどのようなものかはわかりませんので、特定のパターンであるとは言えません。

于 2013-08-10T13:32:54.067 に答える