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

本章内容

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.思考

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值