言葉を理解します
主に背中を与えることを、その人の特性に基づいて、あなたへの訪問や物事の後、いくつかの指定されたシーン環境に対処します。(特性が頻繁に変化する場合は、デザインパターンは適していません)
前提
無意識のうちに、私たちは、最終的な設計モデル、そのビジターパターンに行ってきました。Visitorパターンは、それが複雑に聞こえます。しかし、このモデルは、異なる人々が異なることについてさまざまな感情を持っていることを、簡単な言葉です。例えば、右、豆腐はスパイシーな豆腐を行うことができ、豆腐を行うこともできます。しかし、これら二つの豆腐を好きではない人の異なる場所。四川省の友人は、江蘇省と浙江省の人々は、いくつかの豆腐を好むかもしれ、スパイシーな豆腐を好むかもしれません。したがって、このような状況では、それを表現するデザインパターンの使い方をすべきですか?
例
typedef struct _Tofu
{
int type;
void (*eat) (struct _Visitor* pVisitor, struct _Tofu* pTofu);
}Tofu;
typedef struct _Visitor
{
int region;
void (*process)(struct _Tofu* pTofu, struct _Visitor* pVisitor);
}Visitor;
そのようなAの豆腐は、あなたが別の判断を行うときに食べます
void eat(struct _Visitor* pVisitor, struct _Tofu* pTofu)
{
assert(NULL != pVisitor && NULL != pTofu);
pVisitor->process(pTofu, pVisitor);
}
操作は、最終的に対処するために、異なる訪問者が関数の定義に関連して、次のプロセスを食べるので。
void process(struct _Tofu* pTofu, struct _Visitor* pVisitor)
{
assert(NULL != pTofu && NULL != pVisitor);
if(pTofu->type == SPICY_FOOD && pVisitor->region == WEST ||
pTofu->type == STRONG_SMELL_FOOD && pVisitor->region == EAST)
{
printf("I like this food!\n");
return;
}
printf("I hate this food!\n");
}
概要
検索と変更パッケージ:デザインパターンが多いと言います。ビジターパターンを採用するかどうか、「変更」に依存しています。Visitorパターン、「変更」は、オブジェクト構造に続いて、特定の訪問者であり、特定の要素が変更された場合、それは「全体としての状況に影響を与える」しかし、あなたは、Visitorパターンを使用してはならない、遅く悪いのメンテナンス。