ich die folgenden Codes geben zu übernehmen, meine Frage zu veranschaulichen:Mit Factory-Methode verschiedene Klassen (C++)
class Basic
{
public:
Basic();
~Basic();
};
class ExtendA: public Basic
{
public:
class Para
{
};
Para para_;
};
class ExtendB: public Basic
{
public:
class Para
{
};
Para para_;
};
enum Method
{
MedExtendA,
MedExtendB,
MedExtendAVar1,
MedExtendBVar1
};
class Enginee
{
public:
class Para()
{
public:
ExtendA::Para paraA_;
ExtendB::Para paraB_;
};
Para paraEnginee_;
Enginee(Method med)
{
switch(med):
{
case MedExtendA:
pBasic.reset(new ExtendA());
break;
case MedExtendAVar1:
pBasic.reset(new ExtendA());
ExtendA *p = dynamic_cast<ExtendA *> (pBasic.get());
p.para_ = ; // set the parameter
break;
case MedExtendB:
...
break;
case MedExtendBVar1:
...
break;
}
}
~Enginee()
{
}
boost::shared_ptr<Basic> pBasic;
};
Aus dem obigen Beispiel können wir sehen, dass Basic
die Basisklasse ist während ExtendA
und ExtendB
ableiten Klasse basierend auf Basic
Klasse. Die Klasse Enginee
ist eine Factory-Klasse, die den Aufruf anderer Klassen erleichtert. Der Grund, warum Enginee
Klasse benötigt wird, kann im folgenden Beispiel gezeigt:
Ohne Enginee
Klasse:
ExtendA objA;
objA.para_ /// parameter setting
objA.do_something();
Mit Enginee Klasse:
Enginee myEngine(MedExtendAVar1);
myEngine.do_something();
Mit einem Wort, mit Factory-Methode zu konstruieren Eine Enginee
Klasse gibt eine einheitliche Schnittstelle für die Verwendung ExtendA
und ExtendB
Klasse. Im obigen Beispiel können wir abhängig von der Parametereinstellung verschiedene Arten von Klassen erstellen, die sehr einfach aufgerufen werden können. Es macht jedoch auch die Codes komplizierter. Hier ist meine Frage: Gibt es andere alternative Lösungen? Was ist das Problem der vorgeschlagenen Lösung?
Können Sie genauer sein als "verschiedene Klassen einbeziehen?" Was ist das Problem, das du lösen willst? Müssen Sie Klassen unterschiedlicher Typen instanziieren, die nur zur Laufzeit ermittelt werden? Oder verkapseln Sie einfach grundlegenden Polymorphismus? –
@TimStraubinger Danke. Ich habe den Namen des Titels neu geschrieben. Die Hauptfrage ist, welche Art von Problem der Verwendung der Factory-Design-Pattern-Methode, um verschiedene Klassen zu integrieren, wie im Beispiel gezeigt. – feelfree
Ich glaube, [Abstract Factory] (https://sourcemaking.com/design_patterns/abstract_factory) ist besser zu Ihrem Problem als Factory-Methode. –