抽象工厂和生成器模式常常被混淆,因为他们之间实在有很多的相似点,比如都是创建型模式,都隐藏产品具体细节,都向用户提供一个包含一系列接口的对象。
这个说法比较抽象。我们通过实现来看看为什么容易混淆。
抽象工厂
我们使用一个汽车生产来做例子。抽象工厂模式如下:
有一个抽象工厂类名为Factory,工厂的作用是生产车的不同部件。
有一个奔驰工厂BenzFactory继承了这个Factory,专门用来生产奔驰车的部件。
有一个奔驰工厂BMWFactory继承了这个Factory,专门用来生产宝马车的部件。
有一个消费者类Consumer,专门组装这些工厂生产的部件。
Class Factory
{
public:
virtua Car* createCar();//生产车
virtua Wheel* createWheel();//生产轮子
Shell* Wheel* createShell();//生产车壳
virtua Engine* createEngine();//生产引擎
}
Class BenzFactory:public Factory//奔驰工厂
{
BenzCar* createCar();//生产奔驰车
Wheel* createWheel();//生产奔驰轮子
Shell* createShell();//生产奔驰车壳
Engine* createEngine();