1.工厂方法模式
每一个水果对应一个水果生产的工厂,然后将所有的工厂抽象出来,也就是父类的工厂。
2.工厂方法模式图示
3.代码实现
#include <iostream>
using namespace std;
class AbstractFruit
{
public:
virtual void showName()=0;
AbstractFruit()
{
cout<<"AbstractFruit构造"<<endl;
}
~AbstractFruit()
{
cout<<"AbstractFruit析构"<<endl;
}
};
class Apple :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am apple"<<endl;
}
Apple()
{
cout<<"Apple构造"<<endl;
}
~Apple()
{
cout<<"Apple析构"<<endl;
}
protected:
private:
};
class Banana :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am banana"<<endl;
}
Banana()
{
cout<<"Banana构造"<<endl;
}
~Banana()
{
cout<<"Banana析构"<<endl;
}
protected:
private:
};
class Pear :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am Pear"<<endl;
}
Pear()
{
cout<<"Pear构造"<<endl;
}
~Pear()
{
cout<<"Pear析构"<<endl;
}
protected:
private:
};
class AbstractFactory
{
public:
virtual AbstractFruit* CreateFruit()=0;
AbstractFactory()
{
cout<<"抽象工厂构造"<<endl;
}
~AbstractFactory()
{
cout<<"抽象工厂析构"<<endl;
}
};
class AppleFactory:public AbstractFactory
{
public:
virtual AbstractFruit* CreateFruit()
{
return new Apple;
};
AppleFactory()
{
cout<<"apple工厂构造"<<endl;
}
~AppleFactory()
{
cout<<"apple工厂析构"<<endl;
}
};
class BananaFactory:public AbstractFactory
{
public:
virtual AbstractFruit* CreateFruit()
{
return new Banana;
};
BananaFactory()
{
cout<<"banana工厂构造"<<endl;
}
~BananaFactory()
{
cout<<"banana工厂析构"<<endl;
}
};
int main()
{
{
AbstractFactory* t_factory = new AppleFactory;//new 一个 苹果工厂
AbstractFruit* t_fruit = t_factory->CreateFruit();//由苹果工厂生产一个水果 ----苹果
t_fruit->showName();
delete t_fruit;
t_fruit = nullptr;
delete t_factory;
t_factory = nullptr;
}
cout<<"------------------------------------------"<<endl;
{
AbstractFactory* t_factory = new BananaFactory;//new 一个 苹果工厂
AbstractFruit* t_fruit = t_factory->CreateFruit();//由苹果工厂生产一个水果 ----苹果
t_fruit->showName();
delete t_fruit;
t_fruit = nullptr;
delete t_factory;
t_factory = nullptr;
}
system("pause");
return 0;
}