工厂模式是为了创建大量相同的对象而设计的,工厂模式又分为简单工厂和抽象工厂,可以理解为初级工厂和高级工厂。高级工厂能做更多的事情。
简单工厂:一个工厂类,用来生成各种产品,产品有很多种,所以定义一个抽象的产品类。实现多态。工厂模式是经常被使用的一种方法。下面是一个例子。
工厂类:
#pragma once
#include"Animal.h"
class Factory
{
public:
Animal* createBear();
Animal* createBird();
Animal* createDog();
};
Animal* Factory::createBear()
{
return new Bear;
}
Animal* Factory::createBird()
{
return new Bird;
}
Animal* Factory::createDog()
{
return new Dog;
}
抽象产品类:
#pragma once
#include<iostream>
class Animal
{
public:
std::string name;
int m_HP;
int m_MP;
virtual void setHP(int hp)=0; // 设置HP
virtual void setMP(int mp)=0;
virtual int getHp()=0;
virtual int getMP()=0;
};
子类:
class Bear :
public Animal
{
public:
void setHP(int hp); // 设置HP
void setMP(int mp);
int getHp();
int getMP();
Bear()
{
std::cout << "Bear被 调用" << std::endl;
}
~Bear()
{
std::cout << "Bear被 调用" << std::endl;
}
};
class Bird
:public Animal
{
void setHP(int hp); // 设置HP
void setMP(int mp);
int getHp();
int getMP();
};
class Dog
:public Animal
{
public:
void setHP(int hp); // 设置HP
void setMP(int mp);
int getHp();
int getMP();
};
实现:
int main(int argc, char **argv)
{
Factory factory;
Animal* bear = factory.createBear();
Bear * pb = dynamic_cast<Bear*>(bear);
pb->setHP(100);
cout << pb->getHp() << endl;
delete pb;
Animal * pd = factory.createDog();
Dog* pdog = dynamic_cast<Dog*>(pd);
pdog->setHP(102);
cout << pdog->getHp() << endl;
delete pdog;
return 0;
}