背景:
在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护。
功能:
将对象的创建和使用分离开来,专门用于创建对象并初始化。并且进行扩展后,可以根据参数不同,创建不同的对象。
例子:
// 设计模式Demo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> using namespace std; //被创建的对象基类 class Product { protected: int num; string name; public: void setNum(int n) { num = n; } void setName(string na) { name = na; } virtual void show() = 0; }; //子类1 class Product1 : public Product { void show() { cout<<"Product1 num: "<<num<<" name: "<<name<<endl; } }; //子类2 class Product2 : public Product { void show() { cout<<"Product2 num: "<<num<<" name: "<<name<<endl; } }; //简单工厂类 class SimpleFactory { public: static Product* GetProduct(int kind, int num, string name) { switch (kind) { case 1: { Product* product = new Product1(); product->setNum(num); product->setName(name); return product; } case 2: { Product* product = new Product2(); product->setNum(num); product->setName(name); return product; } default: return NULL; } } }; int _tmain(int argc, _TCHAR* argv[]) { SimpleFactory factory; Product* product = factory.GetProduct(1, 0, "hehe"); product->show(); product = factory.GetProduct(2, 1, "haha"); product->show(); getchar(); return 0; }
结果:
Product1 num: 0 name: hehe
Product2 num: 1 name: haha
可见,使用了简单工厂模式之后,创建一个对象的代码变得十分简洁,修改时仅需要在工厂类内部进行一些修改,而不需要像原来一样,每次创建对象的地方都要进行修改。大大的增加了代码的简洁性。
时间: 2024-08-02 11:04:53