工程模式一次只能生产一个产品,抽象工厂模式则是一次生产一组产品;
角色:
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
class Fruit //抽象产品
{
public:
virtual void show()
{
cout<<"Fruit"<<endl;
}
};
class FruitFactory //抽象工厂
{
public:
virtual Fruit* getApple()
{
return new Fruit();
}
virtual Fruit* getBanana()
{
return new Fruit();
}
};
class SouthBanana : public Fruit //具体的产品 以south 和noreth分组
{
public:
virtual void sayname()
{
cout<<"South Banana \n"<<endl;
}
};
class SouthApple : public Fruit //具体产品
{
public:
virtual void sayname()
{
cout<<"South Apple \n"<<endl;
}
}
//具体产品
class NorthBanana : public Fruit
{
public:
virtual void sayname()
{
cout<<"North Banana \n"<<endl;
}
};
//具体产品
class NorthApple : public Fruit
{
public:
virtual void sayname()
{
cout<<"North Apple \n"<<endl;
}
};
class SourthFruitFactory : public FruitFactory
{//具体工厂,南方工厂只生产南方的产品
public:
virtual Fruit* getApple()
{
return new SouthApple();
}
virtual Fruit* getBanana()
{
return new SouthBanana();
}
};
class NorthFruitFactory : public FruitFactory
{//具体工厂
public:
virtual Fruit* getApple()
{
return new NorthApple();
}
virtual Fruit* getBanana()
{
return new NorthBanana();
}
};
void main()
{
FruitFactory * ff = NULL;
Fruit *fruit = NULL;
ff = new SourthFruitFactory();
fruit = ff->getApple();
fruit->sayname();
fruit = ff->getBanana();
fruit->sayname();
delete fruit;
delete ff;
ff = new NorthFruitFactory();
fruit = ff->getApple();
fruit->sayname();
fruit = ff->getBanana();
fruit->sayname();
delete fruit;
delete ff;
cout<<"hello....\n";
system("pause");
}