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
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 (m.sbmmt.com) !