设计模式学习笔记之(一、工厂模式)

来源:互联网 发布:java上机考试题库 编辑:程序博客网 时间:2024/05/21 06:51

2011年3月3日 星期四 〖农历 辛卯 免年 正月廿九〗
最近学习了程杰老师编著的《大话设计模式》,真的觉得对自己很适用。因为我对设计模式了解的很少,之前也看过几次关于设计模式的书籍,可是刚看了开头,就看不下去了。这本书浅显易懂,适用于初学者,所以有兴趣的朋友可以买来看看哦。
书中的代码均采用C#来实现,我学习的过程中,全部使用C++来实现。如果同样有兴趣的朋友,可以和我一起学习、探讨。不过,我刚刚在学习哦。可能会很慢。只是把自己学到的、理解的,分享出来,希望对大家有所帮助。
好了,言归正传,进入主题吧。呵呵~
首先来看一下,工厂模式的结构图。
个人觉得学习每一种模式,首先得理解它的结构图,这样的话,就可以轻松地理解它的精髓,这样它的实现就不难了。
工厂模式
关键代码实现如下:
父类:COperateSuper.cpp
//实现运算功能
double COperateSuper::GetResult()
{
    return 0;
}

void COperateSuper::SetNumber(double num1, double num2)
{
    m_num1 = num1;
    m_num2 = num2;
}
COperateSuper.h
public:
    virtual double GetResult();//虚函数,这里也可以采用纯虚函数。
protected:
    double m_num2;
    double m_num1;
     //注:子类拥有父类中的所有非private属性

子类1:COperateAdd.cpp
//实现加法运算
double COperateAdd::GetResult()
{
    return m_num1 + m_num2;
}

子类2:COperateSub.cpp
//实现减法运算
double COperateSub::GetResult()
{
    return m_num1 - m_num2;
}

子类3:COperateMul.cpp
//实现乘法运算
double COperateMul::GetResult()
{
    return m_num1 * m_num2;
}

工厂类:COperateFactory.cpp
//实现对各子类的调用功能
COperateSuper *COperateFactory::CreateFactory(char ctype)
{
    COperateSuper *super = NULL;
    switch(ctype)
    {
    case 'A':
        super = new COperateAdd();
        break;
     case 'B':
        super = new COperateSub();
        break;
    case 'C':
        super = new COperateMul();
        break;
    default:
        break;
    }
    return super;
}
//注:switch分支语句只支持数字和字符,所以有些书中按字符串去进行分支判断操作,应该是不对的。
客户端实现 main.cpp
cout<<"输入两个数据:";
double num1,num2;
cin>>num1>>num2;
cout<<"选择计算方式:A:加法;B:减法;C:乘法";
char ch;
cin>>ch;
COperateSuper *oper = COperateFactory::CreateFactory(ch);
oper->SetNumber(num1, num2);
printf("计算结果:[%.1f]/n",oper->GetResult());

//释放内存

if(oper != NULL)

{

   delete oper;

}


由于时间的关系,今天先整理到这儿,可能不太详细。争取这几天重新编辑一下吧。呵呵因为刚开始学习,可能理解上会有一些问题,也希望感兴趣的朋友一起来学习、讨论。
下班罗。
注:今天收到3.8号的礼品了,又是开心的一天。呵呵~

我自己修改了无数遍,终于把格式错乱和图片无法上传的问题解决了,太费劲了。。。
花费在格式上的时间太多了,打击到我了。5555~

原创粉丝点击