设计模式C++描述----03.工厂(Factory)模式 (三)

2014-11-24 12:03:50 · 作者: · 浏览: 2



//抽象工厂类
class Factory
{
public:
virtual Product* CreateProduct() = 0;
virtual Chip* CreateChip() = 0;
};

//生产A的工厂
class FactoryA: public Factory
{
public:
Product* CreateProduct() //产品
{
return new ProductA;
}

Chip* CreateChip() //芯片
{
return new ChipA;
}
};

//生产B的工厂
class FactoryB: public Factory
{
public:
Product* CreateProduct() //产品
{
return new ProductB;
}

Chip* CreateChip() //芯片
{
return new ChipB;
}
};


int main()
{
Factory* factury = new FactoryA(); //A工厂

Product* product = factury->CreateProduct(); //生产产品
Chip* chip = factury->CreateChip(); //生产芯片

product->Show();
chip->Show();

return 0;
}
//抽象产品类
class Product
{
public:
virtual void Show() = 0;
};

//产品A
class ProductA: public Product
{
public:
void Show()
{
cout<<"Product A"< }
};

//产品B
class ProductB: public Product
{
public:
void Show()
{
cout<<"Product B"< }
};

//抽象芯片类
class Chip
{
public:
virtual void Show() = 0;
};

//芯片A
class ChipA: public Chip
{
public:
void Show()
{
cout<<"Chip A"< }
};

//芯片B
class ChipB: public Chip
{
public:
void Show()
{
cout<<"Chip B"< }
};


//抽象工厂类
class Factory
{
public:
virtual Product* CreateProduct() = 0;
virtual Chip* CreateChip() = 0;
};

//生产A的工厂
class FactoryA: public Factory
{
public:
Product* CreateProduct() //产品
{
return new ProductA;
}

Chip* CreateChip() //芯片
{
return new ChipA;
}
};

//生产B的工厂
class FactoryB: public Factory
{
public:
Product* CreateProduct() //产品
{
return new ProductB;
}

Chip* CreateChip() //芯片
{
return new ChipB;
}
};


int main()
{
Factory* factury = new FactoryA(); //A工厂

Product* product = factury->CreateProduct(); //生产产品
Chip* chip = factury->CreateChip(); //生产芯片

product->Show();
chip->Show();

return 0;
}
我们可以发现,抽象工厂比工厂模式所能处理的产品更多,最关健的是这些产品有不同的基类。


优点:

1. AbstractFactory 模式关键就是将这一组对象的创建封装到一个用于创建对象的工厂类(ConcreteFactory)中,维护这样一个工厂创建类总比维护 n 多相关对象的创建过程要简单的多。

2. 它的最大好处是易于交换产品系列,比如我要B工厂的产品,只需要在客户端代码修改一处即可。

打个比方:

这时客户只要知道A工厂是生产A类的产品和芯片的,B工厂是生产B类的,其它都不用关心,只要想要与A类相关的东东就去找A就行了。

四. 总结:


1. 简单工厂模式,所有的产品都在工厂类中进行生产。功能单一时,没有什么问题,但是当增加很多新产品时,就要不断的修改产品类,易于出错,也违反了对修改是封闭的原则。

2. 工厂方法模式,每个工厂生产一种产品,这样分工更加明确。当增加新产品时,只需增加一个工厂类,而不用修改原有工厂类,这样工厂类的耦合度就降低了。


3. 抽象工厂模式,比工厂方法模式处理的情况更多。主要是对不同产品的处理,这时的工厂能够生产多种产品,这多种产品虽然没有共同基类,但是却属于一类,具体体现在都是由同一个工厂生产。


作者 lwbeyond