首页 > 代码库 > 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.工厂方法模式