このコードがすべてのことをしているのではないかと疑問に思っていた純粋なファクトリメソッドデザインパターンは尋ねていますか?これは私の最終的なプログラミングモジュールの準備であり、それが設計パターンの正しい適用であることを確認するだけです。ファクトリメソッドC++の実装
#include <QCoreApplication>
#include <QString>
#include <QDebug>
class Bread
{
public:
virtual void print() = 0;
};
class WhiteBread: public Bread
{
public:
void print() {
qDebug() << "White bread";
}
};
class BrownBread: public Bread
{
public:
void print() {
qDebug() << "Brown bread";
}
};
class BreadFactory {
public:
Bread* makeBread(QString type) {
if (type == "White bread")
return new WhiteBread();
else if (type == "Brown bread")
return new BrownBread();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
BreadFactory *breadFactory = new BreadFactory();
Bread *breadType;
breadType= breadFactory->makeBread("White bread");
breadType->print();
breadType = breadFactory->makeBread("Brown bread");
breadType->print();
return a.exec();
}
私はこれを '抽象ファクトリメソッド' と呼ばれていると思います。それが意味するものなら、それはOKです。しかし、本当に「純粋な」(純粋仮想)が意味されている場合は、純粋な仮想(ボディなし)のファクトリメソッドと、同じシグネチャを持つそのメソッドの実装を持つ2つの継承している具象クラスを持つ抽象祖先クラス(abstractファクトリメソッドの抽象戻り型の異なる派生クラスのオブジェクトを作成します。 –
あなたのものはファクトリメソッドの単純化されたバリエーションであり、実用的ではありません。ファクトリクラスコードを変更せずに新しい派生オブジェクトyellow_breadをインクルードする必要がある場合オブジェクトを動的に登録できるメソッドが工場で必要です。 – seccpur
btw、仮想デストラクタがありません。makeBreadのすべてのパスが返されるわけではありません。 'unique_ptr'は生ポインタよりも優れています。 – Jarod42