您的位置:首页 > 其它

抽象工厂和生成器

2010-10-21 11:09 267 查看
用一个例子在表述抽象工厂和生成器的差异,备忘!

抽象工厂应用来生产一系列的对象,相当于配套产品

生成器用来组装各种部件使之成为一个整体

/*
抽象工厂(abstract factory)和生成器(builder)
抽象工厂用来生成对象
生成器用来生成和组装对象
使用这两种模式来模拟生产一台只有CPU的计算机
*/

//首先定义 Computer、 CPU类.
class CPU
{
};
class Computer
{
public:
void Assembl(CPU* _cpu);
private:
CPU* _cpu;
};

//定义一个CPU工厂(abstract factory),这个工厂生产整机,也生成配件件。
class CPUFactory
{
public:
virtual CPU* CreateCPU() = 0;//CPU工厂一定要生成CPU要不然关门算了
};

//定义一个品牌机厂商(builder), 这个厂商自己会生成电脑配件,但他们更多的时候是从工厂处拿配件组装电脑,测试兼容性,然后出厂。
class ComputerBuilder
{
public:
virtual void BulidComputer(){};
virtual Computer* GetComputer(){};
};

//定义AMD
class AMDCPU : public CPU{};
class AMD : public CPUFactory
{
public:
AMDCPU* CreateCPU()
{
return new AMDCPU();
}
};
//定义Inter
class IntelCPU : public CPU{};
class Intel : public CPUFactory
{
public:
IntelCPU* CreateCPU()
{
return new IntelCPU();
}
};
//定义DELL
class DELLComputer : public Computer{};
class DELL : public ComputerBuilder
{
public:
//生产一台只有CPU的电脑,这个factory可以是AMD也可以是Intel
void BulidComputer()
{
_computer = new DELLComputer();

CPU* cpu = _factory->CreateCPU();

//装配电脑
_computer->Assembl(cpu);
};

//出货(这个破电脑只有一个CPU...)
Computer* GetComputer()
{
return _computer;
}

//设置CPU生产商
void SetFactory(CPUFactory* factory)
{
_factory = factory;
}

private:
DELLComputer* _computer;
CPUFactory*   _factory;
};
//定义客户类,从品牌机厂商订购电脑。
class Client
{
public:
void GetComputer(ComputerBuilder* builder)
{
builder->BulidComputer();

_computer = builder->GetComputer();
}

private:
Computer* _computer;
};

//最后开始使用了
int main()
{
//世界上有了DELL
DELL* dell = new DELL();
//世界上有了Intel
Intel* intel = new Intel();

//我是一个客户
Client me;

//我想要一台有i7 930 CPU的DELL,于是打电话给DELL,叫DELL给我造一个。。。
//DELL为了我先去找到Intel
dell->SetFactory(intel);

//然后DELL给我电脑了
me.GetComputer(dell);
}
/*
最后
这个两个模式一起用
想要什么牌子的电脑
想换什么牌子的CPU变得好快
太爽了
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: