Maison >développement back-end >Tutoriel C#.Net >Une brève introduction au modèle de méthode d'usine dans les modèles de conception C

Une brève introduction au modèle de méthode d'usine dans les modèles de conception C

黄舟
黄舟original
2017-01-18 14:59:581542parcourir

Méthode Factory : définissez une interface pour créer des objets et laissez les sous-classes instancier quelle classe. La méthode factory retarde l'instanciation d'une classe vers ses sous-classes.

La différence avec une usine simple : une usine simple doit modifier la classe d'origine, ce qui viole le principe d'ouverture et de fermeture. La méthode factory évite ce problème de classes. Il conserve les avantages de l'encapsulation du processus de création d'objets et n'a besoin que d'ajouter une classe d'usine, ce qui résout le problème du simple jugement de branche d'usine.

Le modèle de méthode Factory contient quatre rôles :

Produit : produit abstrait

ConcreteProduct : produit en béton

Factory : usine abstraite

ConcreteFactory : Usine spécifique

Diagramme de classes UML


Une brève introduction au modèle de méthode dusine dans les modèles de conception C


Apprenez ici Lei Feng, par exemple, utilise le modèle de la méthode d'usine et considère la méthode de Lei Feng comme un produit abstrait, correspondant à une usine abstraite ; ceux qui apprennent de Lei Feng la considèrent comme un produit concret, correspondant à une usine concrète ; Si vous souhaitez ajouter une catégorie de personnes qui apprennent de Lei Feng, il vous suffit d'ajouter la catégorie correspondante sans modifier la catégorie d'origine.

Cas de test :

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

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

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

    return 0;
}

Catégorie Lei Feng (produit abstrait) :

[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";
    }
};

Personnes qui apprennent de Lei Feng (produits spécifiques) :

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

Cours d'usine de Lei Feng (usine abstraite) :

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

Apprenez l'usine d'objets de Lei Feng (usine à béton) :

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

Ce qui précède est le contenu de l'usine modèle de méthode du modèle de conception C, pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn