工厂方法设计模式,创造万物的发源地-工厂
本章内容
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.思考