• 欢迎光临~

工厂模式 FactoryMethod模式

开发技术 开发技术 2022-08-21 次浏览

工厂模式 factoryMethod

1 定义

​ 定义一个勇于创建产品对象的工厂接口,让工厂子类决定实例化哪一个产品类

2 设计思想

​ 其实就是客户需要什么类,就去创建什么具体的类。具体类的实现并不是由工厂来实现的,而是由客户自己决定到底是创建哪个类。

(但是我个人感觉有点奇怪啊,客户怎么知道到底有哪些类呢??,但是同样的,简单工厂模式,客户也是不知道都有哪些类的,所以这个不重要,哈哈哈哈哈)

3 结构类图

工厂模式 FactoryMethod模式

4 常用场景

主要是生成复杂对象实例,尝试使用工厂模式来代替。就是并不对外暴露该对象的实现,用户不用关心如何实现的。

​ 明确的分割创建对象和 管理对象的职责。

​ 简单工厂模式:适用于产品种类比较少,获取扩展的概率比较低的情况。

4 具体的代码例子

#include <iostream>

// 使用计算器来作为例子
class Produce
{
public:
    virtual int operation(int a, int b) = 0;
    virtual ~Produce()
    {   

    }
};

class ProduceAdd:public Produce
{
public:
    int operation(int a, int b) override
    {   
         return a + b;
    }   
};

class ProduceMul:public Produce
{
public:
    int operation(int a, int b) override
    {
        return a * b;
    }   
};


// 定义工厂
class Factory
{                                                                                                                                                                                           
public:
    virtual Produce* create_product() = 0;
    virtual ~Factory()
    {
    
    }
};

class FactoryAdd:public Factory
{
public:
    Produce *create_product()override
    {
        return new ProduceAdd();
    }
};

class FactoryMul:public Factory
{
public:
    Produce *create_product()override
    {
        return new ProduceMul();
    }
};


#endif         


// 进行测试
  1 #include "factoryMethod.h"
  2 #include <iostream>
  3 
  4 using namespace std;
  5     
  6 int main()
  7 {
  8     // 使用,都是先创建工厂,之后在创建产品,然后消耗产品
  9     Factory *factoryAdd = new FactoryAdd();
 10     Factory *factoryMul = new FactoryMul();
 11 
 12     Produce *productAdd = factoryAdd->create_product();
 13     Produce *produceMul = factoryMul->create_product();
 14 
 15     int res1 = productAdd->operation(1,2);
 16     cout << "add(1,2) = " << res1 << endl;
 17 
 18     cout << "mul(1,2) = " << produceMul->operation(1,2) << endl;
 19 
 20     delete produceMul;
 21     delete productAdd;
 22     delete factoryAdd;
 23     delete factoryMul;                                                                                                                                                                  
 24 
 25     return 0;
 26 }   
 27 
// 输出结果
     
add(1,2) = 3
mul(1,2) = 2

缺点:每次重新创建一个产品的时候,就需要新建一个工厂,类的数量增加较多,类之间的关系比较复杂。

程序员灯塔
转载请注明原文链接:工厂模式 FactoryMethod模式
喜欢 (0)