通过操作简单工厂类,让工厂类来new一个类。示例:
#include<iostream> //定义水果基类。//定义抽象水果 class AbstractFruit{ public: virtual void Showname()=0;//使用虚函数在这里,定义了一个方法 这个函数在水果里面被实例化 }; class Apple : public AbstractFruit{ //public 继承,原来 public 变成了public 原来的protected 变成了 protected、、、 按照优先级原则来 private> protected >public public: virtual void Showname(){ //实现之前定义的方法 std::cout<< "我是苹果"<< std::endl; } }; class Pear : public AbstractFruit{ public: virtual void Showname(){ std::cout<< "我是鸭梨"<< std::endl; } }; class Banana : public AbstractFruit{ public: virtual void Showname(){ std::cout<< "我是香蕉"<< std::endl; } }; //定义水果工厂 class FruitFactory{ public: static AbstractFruit* CreateFruit(std::string flag){ //返回一个抽象的类 if (flag == "apple"){ return new Apple; } else if(flag == "pear"){ return new Pear; } else if(flag == "banana"){ return new Banana; } } }; void test01(){ FruitFactory* factory = new FruitFactory; AbstractFruit* fruit = factory->CreateFruit("banana"); fruit->Showname(); delete fruit; fruit = factory->CreateFruit("apple"); fruit->Showname(); delete fruit; fruit = factory->CreateFruit("banana"); fruit->Showname(); delete fruit; fruit = factory->CreateFruit("pear"); fruit->Showname(); delete fruit; } int main(){ test01(); }工厂方法模式 = 简单工厂模式 + 开闭原则
#include<iostream> //定义水果基类。//定义抽象水果 class AbstractFruit{ public: virtual void Showname()=0;//使用虚函数在这里,定义了一个方法 这个函数在水果里面被实例化 }; class Apple : public AbstractFruit{ //public 继承,原来 public 变成了public 原来的protected 变成了 protected、、、 按照优先级原则来 private> protected >public public: virtual void Showname(){ //实现之前定义的方法 std::cout<< "我是苹果"<< std::endl; } }; class Pear : public AbstractFruit{ public: virtual void Showname(){ std::cout<< "我是鸭梨"<< std::endl; } }; class Banana : public AbstractFruit{ public: virtual void Showname(){ std::cout<< "我是香蕉"<< std::endl; } }; //定义抽象工厂 class AbstractFruitFactory{ public: virtual AbstractFruit* CreateFruit() = 0; }; class AppleFactory: public AbstractFruitFactory{ virtual AbstractFruit* CreateFruit(){ return new Apple; } }; class BananaFactory: public AbstractFruitFactory{ virtual AbstractFruit* CreateFruit(){ return new Banana; } }; class PearFactory: public AbstractFruitFactory{ virtual AbstractFruit* CreateFruit(){ return new Pear; } }; void test01(){ //这里我有点疑问就是如果直接定义AbstractFruitFactory* factory = new BananaFactory; //好像后面再赋值 factory = new AppleFactory;会报错 这是什么原因呢。 AbstractFruitFactory* factory = NULL; AbstractFruit* fruit = NULL; factory = new BananaFactory; fruit = factory->CreateFruit(); fruit->Showname(); delete fruit; delete factory; factory = new AppleFactory; fruit = factory->CreateFruit(); fruit->Showname(); delete fruit; delete factory; factory = new PearFactory; fruit = factory->CreateFruit(); fruit->Showname(); delete fruit; delete factory; } int main(){ test01(); }完整代码如下:
#include<iostream> //创建抽象类 class AbstractApple{ public: virtual void Showname()=0; }; class AbstractBanana{ public: virtual void Showname()=0; }; class AbstractPear{ public: virtual void Showname()=0; }; //创建派生类 class CNapple : public AbstractApple{ public: virtual void Showname(){ std::cout<<"Chinese apple"<<std::endl; } }; class CNbanana : public AbstractBanana{ public: virtual void Showname(){ std::cout<<"Chinese banana"<<std::endl; } }; class CNpear : public AbstractPear{ public: virtual void Showname(){ std::cout<<"Chinese pear"<<std::endl; } }; class USAapple : public AbstractApple{ public: virtual void Showname(){ std::cout<<"American apple"<<std::endl; } }; class USAbanana : public AbstractBanana{ public: virtual void Showname(){ std::cout<<"American banana"<<std::endl; } }; class USApear : public AbstractPear{ public: virtual void Showname(){ std::cout<<"American pear"<<std::endl; } }; class JPapple : public AbstractApple{ public: virtual void Showname(){ std::cout<<"Japanese apple"<<std::endl; } }; class JPbanana : public AbstractBanana{ public: virtual void Showname(){ std::cout<<"Japanese banana"<<std::endl; } }; class JPpear : public AbstractPear{ public: virtual void Showname(){ std::cout<<"Japanese pear"<<std::endl; } }; //创建抽象工厂,针对产品族 class AbstractFactory{ public: virtual AbstractApple* CreateApple() = 0; virtual AbstractBanana* CreateBanana() = 0; virtual AbstractPear* CreatePear() = 0; }; //创建派生 class ChinaFactory : public AbstractFactory{ public: virtual AbstractApple* CreateApple(){ return new CNapple; } virtual AbstractBanana* CreateBanana(){ return new CNbanana; } virtual AbstractPear* CreatePear(){ return new CNpear; } }; class AmericanFactory : public AbstractFactory{ public: virtual AbstractApple* CreateApple(){ return new USAapple; } virtual AbstractBanana* CreateBanana(){ return new USAbanana; } virtual AbstractPear* CreatePear(){ return new USApear; } }; class JapanFactory : public AbstractFactory{ public: virtual AbstractApple* CreateApple(){ return new JPapple; } virtual AbstractBanana* CreateBanana(){ return new JPbanana; } virtual AbstractPear* CreatePear(){ return new JPpear; } }; void test(){ AbstractFactory* factory = NULL; AbstractApple* apple = NULL; AbstractBanana* banana = NULL; AbstractPear* pear = NULL; factory = new ChinaFactory; //定义一个新工厂 apple = factory->CreateApple(); // factory 生产一个apple banana = factory->CreateBanana(); pear = factory->CreatePear(); apple->Showname(); banana->Showname(); pear ->Showname(); delete pear; delete banana; delete apple; delete factory; } int main(){ test(); return 0; }