设计模式之(五、工厂方法模式)

2011年3月8日 星期二 〖农历 辛卯 免年 二月初四〗 晴
设计模式之五、工厂方法模式Factory Method
适用范围:
定义一个用于创建对象的接口,让子类去决定实例化哪一个对象。
例如:运算操作实例。
我们可以在具体的每一个实现工厂中去决定,实例化哪一个操作,即加法?减法?乘法运算?
工厂方法模式与简单工厂模式的区别:
简单工厂模式最大的优点在于,工厂类中饮食了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式的结构图


C++关键代码如下:
1、接口类:IProduct
提供纯虚函数:
virtual void Operation() = 0;

2、具体的实现类:CConcreteProduct.cpp
void CConcreteProduct::Operation()
{
    printf("A Operation~");
}

3、工厂接口类IFactory
提供纯虚函数
virtaul CProduct *CreateFactory() = 0;

4、工厂具体实现类:CConcreteFactory.cpp
CProduct *CConcreteFactory::CreateFactory()
{
    return new CConcreteFactory();
}

5、客户端代码:main.cpp
IFactory *fac = new CConcreteFactory();
IProductv *pro = fac->CreateFactory();
pro->Operation();

 

if ( fac != NULL)

{

   delete fac;

}

 

if ( pro != NULL )

{

   delete pro;

}

实例:运算操作利用工厂方法模式来实现。
工厂方法模式结构图如下:


C++关键代码如下:
1、运算类接口:IOperation
提供了一个纯虚函数:
public:
virtual double GetResult() = 0;
protected:
    double m_num1;
    double m_num2;

IOperation.cpp
void IOperation::SetNumber(double num1, double num2)
{
    m_num1 = num1;
    m_num2 = num2;
}

2、具体的运算子类,加法运算:CAdd.cpp
double CAdd::GetResult()
{
    return m_num1 + m_num2;
}

3、具体的运算子类,减法运算:CSub.cpp
double CSub::GetResult()
{
    return m_num1 - m_num2;
}
4、其它类似,不重复。
...

5、工厂类接口:IFactory
提供了纯虚函数
virtual IOperation *CreateFactory() = 0;
6、具体的子工厂类,加法工厂:CAddFactory.cpp
IOperation *CAddFactory::CreateFactory()
{
    return new CAdd();
}
7、具体的子工厂类,减法工厂:CSubFactory.cpp
IOperation *CSubFactory::CreateFactory()
{
    return new CSub();
}
8、其它工厂类类似,不重复。
....

9、客户端实现main.cpp
IFactory *fac = new CAddFactory();
IOperation *oper = fac->CreateFactory();
oper->SetNumber(1,2);
cout<<"加法运算结果:"<GetResult()<
IFactory *fac1 = new CSubFactory();
IOperation *oper1 = fac1->CreateFactory();
oper1->SetNumber(1,2);
cout<<"减法运算结果:"<GetResult()<

 

//释放内存

if(fac != NULL)

{

   delete fac;

}

 

if (oper != NULL)

{

   delete oper;

}

 

if( fac1 != NULL)

{

   delete fac1;

}

 

if(oper1 != NULL)

{

   delete oper1;

}
以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值