工厂方法设计模式,创造万物的发源地-工厂

本章内容

1. 设计模式基本概念

2. UML类图

3. 源代码

4. 优缺点分析

5. 适用场景

6. 思考

 

1. 工厂方法设计模式基本概念

定义: 产品类以及生产产品的工厂类都通过工厂来生产的方法。

基本类:

产品具体类:

产品抽象类:

工厂具体类:

工厂抽象类:

工厂方法设计模式,创造万物的发源地-工厂

2. UML类图

工厂方法设计模式,创造万物的发源地-工厂

 

3. 源代码

// factory2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>

// 抽象水果
class Fruit {
public:
    virtual void getName() = 0;
};
// 抽象工厂
class absFactory {
public:
    virtual Fruit* createFruit() = 0;
};

// 具体水果
class Appel :public Fruit {
public:
    virtual void getName() {
        std::cout << "我是苹果.."<<std::endl;
    }
};

class Banana:public Fruit {
public:
    virtual void getName() {
        std::cout << "我是香蕉.." << std::endl;
    }
};

// 具体工厂
class appleFactory :public absFactory {
public:
    virtual Fruit* createFruit() {
        return new Appel;
    }
};

class bananaFactory :public absFactory {
public:
    virtual Fruit* createFruit() {
        return new Banana;
    }
};

//新增鸭梨任务
class Pear : public Fruit {
public:
    virtual void getName() {
        std::cout << "我是鸭梨.." << std::endl;
    }
};
class pearFactory : public absFactory {
public:
    Fruit* createFruit() {
        return new Pear;
    }
};

int main()
{
    Fruit* fruit = NULL;
    absFactory* factory = NULL;
    
    // 利用苹果工厂产生苹果,并获得苹果信息
    factory = new appleFactory();
    fruit = factory->createFruit();
    fruit->getName();
    delete fruit;
    delete factory;
    fruit = NULL;
    factory = NULL;

    // 利用苹果工厂产生香蕉,并获得苹果信息
    factory = new bananaFactory();
    fruit = factory->createFruit();
    fruit->getName();
    delete fruit;
    delete factory;
    fruit = NULL;
    factory = NULL;

    // 利用苹果工厂产生鸭梨,并获得苹果信息
    factory = new pearFactory();
    fruit = factory->createFruit();
    fruit->getName();
    delete fruit;
    delete factory;
    fruit = NULL;
    factory = NULL;
}
 

 

4. 优缺点

 

5. 适用场景

将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。

6.思考