[创建型] 抽象工厂模式

前面讲到工厂方法模式,其实工厂方法模式是抽象工厂模式的特例。工厂方法模式中每个工厂只生产一种产品,而在抽象工厂模式中每个工厂可以生产多种具体产品。

适用性:(适用性论述是复制过来的,本人不理解!初学)
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。

已电视机实例,附上代码:

#include <iostream>
using namespace std;
// 抽象工厂模式
/*

*
*/
class TV // 电视机抽象类
{
public:
TV() {}
virtual ~TV() {}
virtual void play() = 0;
};

class HaierTV : public TV //海尔电视机类
{
public:
HaierTV() {}
virtual~HaierTV() {}
virtual void play()
{
cout << "海尔电视机播放中..." << endl;
}
};

class TCLTV : public TV //TCL电视机类
{
public:
TCLTV() {}
virtual ~TCLTV() {}
virtual void play()
{
cout << "TCL电视机播放中..." << endl;
}
};

class AirConditioner // 空调抽象类
{
public:
AirConditioner() {}
virtual ~AirConditioner() {}
virtual void changeTemperature() = 0;
};

class HaierConditioner : public AirConditioner // 海尔空调类
{
public:
HaierConditioner() {}
virtual ~HaierConditioner() {}
virtual void changeTemperature()
{
cout << "海尔空调温度改变中..." << endl;
}
};

class TCLConditioner : public AirConditioner // TCL空调类
{
public:
TCLConditioner() {}
virtual ~TCLConditioner() {}
virtual void changeTemperature()
{
cout << "TCL空调温度改变中..." << endl;
}
};

class AbstructFactory // 抽象工厂类
{
public:
AbstructFactory() {}
virtual ~AbstructFactory() {}
virtual TV * ProduceTV() = 0;
virtual AirConditioner * ProduceAirconditioner() = 0;
};

class HaierFactory : public AbstructFactory // 海尔工厂类
{
public:
HaierFactory() {}
virtual ~HaierFactory() {}
virtual TV * ProduceTV()
{
return new HaierTV();
}
virtual AirConditioner * ProduceAirconditioner()
{
return new HaierConditioner();
}
};

class TCLFactory : public AbstructFactory // TCL 工程类
{
public:
TCLFactory() {}
virtual ~TCLFactory() {}
virtual TV * ProduceTV()
{
return new TCLTV();
}
virtual AirConditioner * ProduceAirconditioner()
{
return new TCLConditioner();
}
};

void main()
{
AbstructFactory *af = new HaierFactory;
TV *htv;
htv = af->ProduceTV();
AirConditioner *hcon;
hcon = af->ProduceAirconditioner();
htv->play();
hcon->changeTemperature();
delete htv;
delete hcon;
delete af;

AbstructFactory *bf = new TCLFactory;
TV *ttv;
ttv = bf->ProduceTV();
ttv->play();
AirConditioner *tcon;
tcon = bf->ProduceAirconditioner();
tcon->changeTemperature();
delete ttv;
delete tcon;
delete bf;
}

输出:

   海尔电视机播放中...

   海尔空调温度改变中...

   TCL电视机播放中...

   TCL空调温度改变中...

原文地址:https://www.cnblogs.com/xuxu8511/p/2403171.html