工厂方法模式
工厂方法模式是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的
#pragma once
#include <iostream>
#define SAFE_DELETE(ptr) if(ptr!=NULL){delete ptr; ptr = NULL;}
using namespace std;
//抽象产品
class Product
{
public:
virtual void Product_introduction() = 0;
};
//水果手机
class Fruit_Phone : public Product
{
virtual void Product_introduction() { cout << "水果手机创新十足" << endl; }
};
//五谷手机
class WuGu_Phone : public Product
{
virtual void Product_introduction() { cout << "五谷手机性价比强悍" << endl; }
};
//抽象工厂
class Factory
{
public:
virtual Product* createProduct() = 0;
};
//富土康工厂
class FuTuK_Factory : public Factory
{
public:
virtual Product* createProduct() { return new Fruit_Phone; }
};
//新西方工厂
class XinXiF_Factory : public Factory
{
public:
virtual Product* createProduct() { return new WuGu_Phone; }
};
int main()
{
//富土康工厂的产品
Factory* a = new FuTuK_Factory;
Product* aP = a->createProduct();
aP->Product_introduction();
//新西方工厂的产品
Factory* b = new XinXiF_Factory;
Product* bP = b->createProduct();
bP->Product_introduction();
SAFE_DELETE(a)
SAFE_DELETE(aP)
SAFE_DELETE(b)
SAFE_DELETE(bP)
return 0;
}
模式应用:
第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。