Factory Mathod設計モデルの初認識
4069 ワード
最近は小さなプロジェクトの設計をしていますが、UMLでクラス図を設計する必要があり、設計モードに適用することは避けられません.
良好な設計は、スタイルの観点から見ても、可用性の観点から見ても、理論的な指導が必要であり、対応する理論が評価されるかもしれない.
このようなコードによって、工場はベースクラスとしてその下で継承されたサブクラスを生成することを知るべきである.すなわち,ファクトリモードに適用する場合,通常は特定のクラスを直接インスタンス化するのではなく,ファクトリクラスによって必要なオブジェクトを生成する.
Enterprise Libraryに触れたことがある場合は、最もよく使われるコードを知っておく必要があります.
これは典型的な工場を利用してオブジェクトを生成する方法である.間違いなく、工場でのメソッドはstaticタイプが一般的で、「工場名.メソッド名」という形式で呼び出されます.
良好な設計は、スタイルの観点から見ても、可用性の観点から見ても、理論的な指導が必要であり、対応する理論が評価されるかもしれない.
//Code in C++ with Factory and Template as follows:(build pass using Microsoft VC++ 6.0)
#include <stdio.h>
class Animal
{
public:
virtual void SayHello() = 0;
};
class Dog : public Animal
{
public:
void SayHello();
};
class Pig : public Animal
{
public:
void SayHello();
};
void Dog::SayHello()
{
printf("Dog say hello!
");
}
void Pig::SayHello()
{
printf("Pig say hello!
");
}
template <typename T>
class AnimalFactory
{
public:
static Animal* produce()
{
return new T;
}
};
int main()
{
//drive testing
(new Dog())->SayHello();
Dog* dog = new Dog();
dog->SayHello();
Pig* pig = new Pig();
pig->SayHello();
//following objects are generated from template of factory
Animal* pDog = AnimalFactory<Dog>::produce();
Animal* pPig = AnimalFactory<Pig>::produce();
pDog->SayHello();
pPig->SayHello();
return 0;
}
このようなコードによって、工場はベースクラスとしてその下で継承されたサブクラスを生成することを知るべきである.すなわち,ファクトリモードに適用する場合,通常は特定のクラスを直接インスタンス化するのではなく,ファクトリクラスによって必要なオブジェクトを生成する.
Enterprise Libraryに触れたことがある場合は、最もよく使われるコードを知っておく必要があります.
1 Database db = DatabaseFactory.CreateDatabase();
これは典型的な工場を利用してオブジェクトを生成する方法である.間違いなく、工場でのメソッドはstaticタイプが一般的で、「工場名.メソッド名」という形式で呼び出されます.