私は現在、ファクトリデザインパターンを実装しようとしていますが、これはC++でどのようにして行われるのか多少混乱します。私はthisウェブページを参照しています。名前空間の代わりに静的なクラス関数を使用するのはいつですか?
したがって、それらのWebページでは、ComputerFactoryというファクトリクラスを定義する例を示しています。このクラスには静的な単一のNewComputerメソッドがあります。
class ComputerFactory
{
public:
static Computer *NewComputer(const std::string &description)
{
if(description == "laptop")
return new Laptop;
if(description == "desktop")
return new Desktop;
return NULL;
}
};
NewComputerが静的であるという事実は、それがComputerFactoryの単一のインスタンスに関連付けられていないことを意味します。したがって、あなたのコードからこのメソッドを呼び出すことができます。
ComputerFactor::NewComputer("description");
これはなぜクラス内でラップする必要があるのか不思議です。それは、静的だと本当に任意のクラスに関連付けされることを意味しない、それはだから私の質問に
namespace ComputerFactory
{
static Computer *NewComputer(const std::string &description)
{
if(description == "laptop")
return new Laptop;
if(description == "desktop")
return new Desktop;
return NULL;
}
}
のような何かをするより理にかなっているので:
- は、私は、有効な記述、名前空間機能です代替?
- 静的メソッドのみを持つクラスを定義することは理にかなっていますか?名前空間を使用する方が理にかなっているようです。
静的メソッド(静的な「現在のクラスはいくつあるか」など)が必要な場合がありますが、これは必要な状況には見えません。何かご意見は?
編集:私はちょうど考えを持っていました。私が挙げた例は、「典型的な」ファクトリメソッドではありません。実際には、ファクトリ関数はより複雑で、他の関数(プライベートクラスメソッド)を呼び出す必要があります。この場合、サブファンクションにアクセスできるように、ファクトリをクラスにラップするのは完全な意味を持ちます。なぜファクトリメソッドがクラスにラップされるのですか?