静态工厂模式(StaticFactoryMethod)又叫做简单工厂模式,属于创建型模式但不属于23种GOF设计模式之一。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是普通工厂模式的一个特殊实现。
以下代码以静态水果工厂为例进行举例说明:
StaticFactoryMethod.h
#pragma once
#include<iostream>
#include<string>
class Fruit // 创建水果类的抽象接口类
{
public:
virtual Fruit* getFruit() = 0;
private:
protected:
};
class Banana :public Fruit
{
public:
Fruit * getFruit(void) { std::cout << "香蕉》》》"<<std::endl; return this;};
private:
protected:
};
class Apple :public Fruit
{
public:
Fruit * getFruit(void) { std::cout << "苹果》》》" << std::endl; return this; };
private:
protected:
};
class StaticFactoryMethod
{
public:
StaticFactoryMethod();
~StaticFactoryMethod();
Fruit *factoryCreating(std::string type)
{
if ("banana" == type)
{
return new Banana;
}
else if ("apple" == type)
{
return new Apple;
}
else return nullptr;
};
};
StaticFactoryMethod.cpp
#include "StaticFactoryMethod.h"
StaticFactoryMethod::StaticFactoryMethod()
{
}
StaticFactoryMethod::~StaticFactoryMethod()
{
}
mainTest.cpp
#include<iostream>
#include"StaticFactoryMethod.h"
int main(void)
{
// 创建一个简单工厂的实例
StaticFactoryMethod* staticFactory = new StaticFactoryMethod();
// 工厂生产水果
Fruit* fruit= staticFactory->factoryCreating("banana");
// dynamic_cast < type-id > ( expression )用于类层次间的上行转换和下行转换
Banana* banana = dynamic_cast<Banana* > (fruit->getFruit()); // 获得工厂生产的水果
delete fruit;
// 工厂生产水果
fruit = staticFactory->factoryCreating("apple");
// dynamic_cast < type-id > ( expression )用于类层次间的上行转换和下行转换
Apple* apple=dynamic_cast<Apple* > (fruit->getFruit()); // 获得工厂生产的水果
delete fruit;
// 工厂生产水果
fruit = staticFactory->factoryCreating("appl");
// dynamic_cast < type-id > ( expression )用于类层次间的上行转换和下行转换
if(nullptr != fruit)
Apple* appl = dynamic_cast<Apple* > (fruit->getFruit()); // 获得工厂生产的水果
delete fruit;
delete staticFactory;
staticFactory = nullptr;
system("pause");
return 0;
}