工厂模式有四个角色:
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。
代码示例:
class Fruit //抽象一个fruit
{
public:
virtual void showName() = 0
}
class FruitFactory //抽象一个工厂
{
public:
virtual Fruit* createFruit() = 0;
}
class Apple:public Fruit //具体的产品
{
public:
virtual void showName()
{
cout<<"apple"<<endl;
}
}
class banana:public Fruit //具体的产品
{
public:
virtual void showName()
{
cout<<"banana"<<endl;
}
}
class AppleFactory : public Factory //具体的产品工厂
{
public:
virtual Fruit* createFruit()
{
return new Apple();
}
}
class bananaFactory:public Factory //具体的产品工厂
{
public:
virtual Fruit* createFruit()
{
return new Apple();
}
}
void main()
{
bananaFactory* productA = new bananaFactory();
AppleFactory* productB = new AppleFactory();
productA->createFruit()->showName();
productB->createFruit()->showName();
}
//输出顺序:banana Apple