1. 抽象工厂方法模式与工厂方法模式的区别
工厂方法模式是在简单工厂方法基础之上再加上开闭原则形成的一种设计模式,其创建对象时不用new创建对象,而是使用工厂来创建,我们只需要提供一个接口就能实现创建,但是工厂模式在创建对象时候太过于单一,它要么生产香蕉,要么生产鸭梨,但是不能做到同时生产这两种,也就是说不能生产一个产品组。而抽象工厂方法模式能够同时生产一个产品族。
2.抽象工厂方法实现
中国工厂负责同时生产中国内地的水果,而美国的工厂负责同时生产美国内地的水果。
#include<cstdio>
#include<iostream>
using namespace std;
//水果类
class Fruit
{
public:
virtual void ShowName()
{
cout<<"fruit\n";
}
};
//水果工厂
class FruitFactory
{
public:
virtual Fruit* getApple()
{
return new Fruit();
}
virtual Fruit* getBanana()
{
return new Fruit();
}
};
//中国香蕉
class ChinaBanana : public Fruit
{
public:
virtual void ShowName()
{
cout<<"China Banana \n"<<endl;
}
};
//中国苹果
class ChinaApple : public Fruit
{
public:
virtual void ShowName()
{
cout<<"China Apple \n"<<endl;
}
};
//美国香蕉
class AmerciaBanana : public Fruit
{
public:
virtual void ShowName()
{
cout<<"Amercia Banana \n"<<endl;
}
};
//美国苹果
class AmerciaApple : public Fruit
{
public:
virtual void ShowName()
{
cout<<"America Apple \n"<<endl;
}
};
//中国工厂
class ChinaFruitFactory : public FruitFactory
{
public:
virtual Fruit* getApple()
{
return new ChinaApple();
}
virtual Fruit* getBanana()
{
return new ChinaBanana();
}
};
//美国工厂
class AmericaFruitFactory : public FruitFactory
{
public:
virtual Fruit* getApple()
{
return new AmerciaApple();
}
virtual Fruit* getBanana()
{
return new AmerciaBanana();
}
};
int main()
{
FruitFactory * ff = NULL;
Fruit *fruit = NULL;
ff = new ChinaFruitFactory();
fruit = ff->getApple();
fruit->ShowName();
fruit = ff->getBanana();
fruit->ShowName();
delete fruit;
delete ff;
ff = new AmericaFruitFactory();
fruit = ff->getApple();
fruit->ShowName();
fruit = ff->getBanana();
fruit->ShowName();
delete fruit;
delete ff;
return 0;
}