创建型模式 工厂模式
/**
* 创建型模式 工厂模式
* 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。
* 符合"开放-封闭"原则 通过添加代码的方式,不是通过修改代码的方式完成功能的增强。
* 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
* 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
*
* 抽象工厂(Creator)角色
* 工厂方法模式的核心,任何工厂类都必须实现这个接口。
* 具体工厂( Concrete Creator)角色
* 具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
* 抽象(Product)角色
* 工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
* 具体产品(Concrete Product)角色
* 工厂方法模式所创建的具体实例对象
*
*/
#include <iostream>
class Fruit
{
public:
virtual void sayname() = 0;
virtual ~Fruit() {}
};
class Banana: public Fruit
{
public:
virtual void sayname() override
{
std::cout << "我是香蕉" << std::endl;
}
};
class Pear: public Fruit
{
public:
virtual void sayname() override
{
std::cout << "我是梨子" << std::endl;
}
};
class AbFactory
{
public:
virtual Fruit * CreateProduct() = 0;
virtual ~AbFactory() {}
};
class BananaFactory: public AbFactory
{
public:
virtual Fruit * CreateProduct() override
{
return new Banana;
}
};
class PearFactory: public AbFactory
{
public:
virtual Fruit * CreateProduct() override
{
return new Pear;
}
};
void mytest()
{
AbFactory *factory = nullptr;
Fruit *fruit = nullptr;
factory = new BananaFactory();
fruit = new Banana();
fruit->sayname();
delete factory;
factory = nullptr;
delete fruit;
fruit = nullptr;
factory = new PearFactory();
fruit = new Pear();
fruit->sayname();
delete factory;
factory = nullptr;
delete fruit;
fruit = nullptr;
return;
}
int main()
{
mytest();
system("pause");
return 0;
}