1.1 模式定义
简单工厂模式:将创建不同对象的代码封装到具体产品类中;
将创建这些具体产品类的公共代码封装到到抽象产品类中;
定义一个工厂类,该类的静态方法可以根据不同参数创建不同的具体产品实例。
模式要点:需要什么类型的产品,只需传入一个正确的参数,就可以获得一个对应的实例。
1.2 模式结构图
1.3 模式角色
抽象产品Product: 具体产品类的父类,封装了各种具体产品的公共方法。
具体产品ConcreteProduct: 需要实例化的类。
工厂类Factory: 简单工厂模式的核心,负责创建所有具体产品的实例。
1.4 代码实现
1 bt_简单工厂模式.h 2 #ifndef SFP_H 3 #define SFP_H 4 #include <string.h> 5 #include <iostream> 6 7 using namespace std; 8 9 /* 定义抽象产品类 */ 10 class Product 11 { 12 public: 13 virtual ~Product(){} 14 void sharedMethod() 15 { 16 cout << "执行具体产品类的公共代码" << endl; 17 } 18 }; 19 20 /* 定义具体产品类 */ 21 class ConcreteProductA : public Product 22 { 23 public: 24 ConcreteProductA() 25 { 26 this->sharedMethod(); 27 cout << "创建具体产品A" << endl; 28 } 29 ~ConcreteProductA() 30 { 31 cout << "销毁具体产品A" << endl; 32 } 33 34 }; 35 class ConcreteProductB : public Product 36 { 37 public: 38 ConcreteProductB() 39 { 40 this->sharedMethod(); 41 cout << "创建具体产品B" << endl; 42 } 43 ~ConcreteProductB() 44 { 45 cout << "销毁具体产品B" << endl; 46 } 47 }; 48 49 /* 定义工厂类 */ 50 class Factory 51 { 52 public: 53 static Product* createProduct(const char* args) 54 { 55 if(strcmp(args, "A") == 0) 56 { 57 return new ConcreteProductA(); 58 } 59 if(strcmp(args, "B") == 0) 60 { 61 return new ConcreteProductB(); 62 } 63 else 64 { 65 cout << "unknown product type" << endl; 66 return NULL; 67 } 68 } 69 }; 70 #endif // SFP_H 71 72 73 74 bt_简单工厂模式.cpp 75 #include "bt_简单工厂模式.h" 76 #include <iostream> 77 78 using namespace std; 79 80 int main() 81 { 82 cout << "*****简单工厂模式测试用例*****" << endl; 83 Product* product = NULL; 84 product = Factory::createProduct("A"); 85 86 delete product; 87 88 return 0; 89 }
1.5 简单工厂模式的简化
在某些情况下,可以将抽象产品类和工厂类合并,将静态工厂方法放在抽象产品类中,如下图所示:
1.6 模式总结
简单工厂模式提供了用于创建对象的工厂类,将对象的创建和使用分量开来,其特点如下:
优点:
分离对象的创建和使用;用户只需通过具体产品对应的参数即可创建实例对象。
缺点:
工厂类职责过重;系统扩展困难,增加新产品必须修改工厂逻辑。
适用场景:
具体产品类比较少且稳定的情况。
参考自刘伟博客: http://blog.csdn.net/lovelion
时间: 2024-12-24 05:56:13