Eine kurze Einführung in Factory-Methodenmuster in C++-Entwurfsmustern

黄舟
Freigeben: 2017-01-18 14:59:58
Original
1440 Leute haben es durchsucht

Factory-Methode: Definieren Sie eine Schnittstelle zum Erstellen von Objekten und lassen Sie Unterklassen welche Klasse instanziieren. Die Factory-Methode verzögert die Instanziierung einer Klasse für ihre Unterklassen.

Der Unterschied zu einer einfachen Fabrik: Eine einfache Fabrik muss die ursprüngliche Klasse ändern, was gegen das Öffnungs- und Schließprinzip verstößt. Die Factory-Methode vermeidet dieses Klassenproblem. Es behält die Vorteile der Kapselung des Objekterstellungsprozesses bei und muss nur eine Fabrikklasse hinzufügen, wodurch das Problem der einfachen Beurteilung von Fabrikzweigen gelöst wird.

Factory-Methodenmuster enthält vier Rollen:

Produkt: abstraktes Produkt

ConcreteProduct: konkretes Produkt

Factory: abstrakte Fabrik

ConcreteFactory : Spezifische Fabrik

UML-Klassendiagramm


Eine kurze Einführung in Factory-Methodenmuster in C++-Entwurfsmustern


Erfahren Sie hier Lei Feng, Verwendet beispielsweise das Fabrikmethodenmodell und betrachtet die Methode von Lei Feng als ein abstraktes Produkt, das einer abstrakten Fabrik entspricht. Diejenigen, die von Lei Feng lernen, betrachten sie als ein konkretes Produkt, das einer konkreten Fabrik entspricht. Wenn Sie Kategorien von Personen hinzufügen möchten, die von Lei Feng lernen, müssen Sie nur die entsprechenden Kategorien hinzufügen, ohne die ursprünglichen Kategorien zu ändern.

Testfälle:

[code]int main(){
    //工厂方法
    IFactory *factory = new UnderGraduateFactory;  //new一个大学生工厂

    //创建学雷锋的学生
    LeiFeng *student = factory->createLeiFeng();

    //学生干了哪些雷锋方法
    student->BuyRice();  //买米
    student->Sweep(); //扫地
    student->Wash();  //清洗   

    return 0;
}
Nach dem Login kopieren

Lei Feng-Klasse (abstraktes Produkt):

[code]class LeiFeng{
public:
    virtual void BuyRice(){
        std::cout << "Buy rice.\n";
    }
    virtual void Sweep(){
        std::cout << "Sweep.\n";
    }
    virtual void Wash(){
        std::cout << "Wash.\n";
    }
};
Nach dem Login kopieren

Personen, die von Lei Feng lernen (spezifische Produkte):

[code]class UnderGraduate: public LeiFeng{
};
//学雷锋的志愿者(具体产品)
class Volunteer: public LeiFeng{
};
Nach dem Login kopieren

Lei Feng-Fabrikklasse (abstrakte Fabrik):

[code]class IFactory{
public:
    //创建学雷锋对象
    virtual LeiFeng* createLeiFeng(){
        return NULL;
    } 
};
Nach dem Login kopieren

Lernen Sie Lei Fengs Objektfabrik (Betonfabrik):

[code]class UnderGraduateFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new UnderGraduate;
    }
};
class VolunteerFactory: public IFactory{
    LeiFeng* createLeiFeng(){
        return new Volunteer;
    }
};
Nach dem Login kopieren

Das Obige ist der Inhalt der Fabrik Methodenmuster des C++-Entwurfsmusters. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!