首页 > 代码库 > 4.工厂方法模式
4.工厂方法模式
1工厂方法模式的核心内容是:
A:每种方法通过独立的类来表示。
B:通过工厂来创建实例化方法
C:理解:带同一个妹子到不同的地点(麦当劳,肯德基….)去吃饭.
2工厂方法模式的作用:程序访问不同的工厂,来让工厂创建自己想要的操作。
3工厂方法模式具体描述
工厂方法模式:核心工厂类不再负责所有产品的创建,
而是将具体创建的工作交给子类去做,成为一个抽象工厂角色
仅负责给出具体工厂类必须实现的接口,
而不接触哪一个产品类应当被实例化这种细节。
请MM去麦当劳吃汉堡,不同的MM有不同的口味,
要每个都记住是一件烦人的事情,我一般采用Factory Method模式,
带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,
让MM直接跟服务员说就行了。
4.工厂方法模式类图
5.代码:
#include<iostream>
#include<string>
usingnamespacestd;
//工厂方法模式:核心工厂类不再负责所有产品的创建,
//而是将具体创建的工作交给子类去做,成为一个抽象工厂角色
//,仅负责给出具体工厂类必须实现的接口,
//而不接触哪一个产品类应当被实例化这种细节。
//请MM去麦当劳吃汉堡,不同的MM有不同的口味,
//要每个都记住是一件烦人的事情,我一般采用Factory Method模式,
//带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,
//让MM直接跟服务员说就行了。
//操作类
classOperation
{
public:
doublenumberA,numberB;
virtualdouble getResult()//
{
return 0;
}
};
//加操作
classaddOperation :publicOperation
{
doublegetResult()
{
returnnumberA +numberB;
}
};
//减操作
classsubOperation :publicOperation
{
doublegetResult()
{
returnnumberA -numberB;
}
};
//乘操作
classmulOperation :publicOperation
{
doublegetResult()
{
returnnumberA*numberB;
}
};
//除操作
classdivOperation :publicOperation
{
doublegetResult()
{
returnnumberA /numberB;
}
};
//工厂
classIFactory
{
public:
virtualOperation *createOperation() = 0;
};
//add工厂
classAddFactory :publicIFactory
{
public:
staticOperation *createOperation()
{
returnnewaddOperation();
}
};
//减工厂
classSubFactory :publicIFactory
{
public:
staticOperation *createOperation()
{
returnnewsubOperation();
}
};
//乘工厂
classMulFactory :publicIFactory
{
public:
staticOperation *createOperation()
{
returnnewmulOperation();
}
};
//除操作
classDivFactory :publicIFactory
{
public:
staticOperation *createOperation()
{
returnnewdivOperation();
}
};
intmain()
{
Operation *oper = MulFactory::createOperation();
oper->numberA = 9;
oper->numberB = 99;
cout <<oper->getResult() << endl;
cin.get();
return 0;
}
运行结果如下:
891
4.工厂方法模式