1.简单工厂模式

1.说明
设计模式笔记开篇,在该系列笔记中,多参考和归纳与《大话设计模式》和《设计模式可复用面向对象软件的基础》,如果有侵权的嫌疑请以邮件通知我(zhang_int@sina.cn)以便及时撤下该系列文章。
该系列文章将遵循以下风格,模式说明,应用举例(选择),代码UML图,代码。文中代码在linux g++方式均编译通过并可执行。代码采用多文件方式,一个类为一个文件,如有读者未执行通过,请在评论区留言,以便及时修正。
如有未拖之处,欢迎各位读者指正,互相学习。
在阅读的时候,请理解UML结构,代码都是次要的。
2.简单工厂模式说明
本质:创建符合要求的对象。
在工厂模式中,通常由工厂类,产品基类接口类,产品类[产品类应该是对等平行的关系,不存在包含,组合的关系逻辑]。一个工厂可以生成多个产品,在客户端通过产品基类提供的公共接口来屏蔽产品的之间的差异。产品之间可以方便快速切换。
有时可能会根据需求类别,在工厂类中用switch进行判别,客户端只需要提出需求的类型即OK。
3.UML图

4.代码

#ifndef __CBASEPRODUCE_H
#define __CBASEPRODUCE_H
class CBaseProduct
{
public:
    void setval(int first, int second)
    {
        m_valA = first;
        m_valB = second;
    }
    virtual int handle() = 0;

public:
    int m_valB;
    int m_valA;
};

#endif

#ifndef __CADDPRODUCT_H
#define __CADDPRODUCT_H

#include "CBaseProduct.h"

class CAddProduct:public CBaseProduct
{
public:
    int handle()
    {
        return m_valA + m_valB;
    }
};

#endif

#ifndef __CMAXPRODUCT_H
#define __CMAXPRODUCT_H
#include "CBaseProduct.h"

class CMaxProduct:public CBaseProduct
{
public:
    int handle()
    {
        int ret;
        if (m_valA>m_valB)
            ret = m_valA;
        else
            ret = m_valB;
        return ret;
    }
};

#endif

#ifndef __CMINPRODUCT_H
#define __CMINPRODUCT_H

#include "CBaseProduct.h"

class CMinProduct:public CBaseProduct
{
public:
    int handle()
    {
        int ret;
        if (m_valA < m_valB)
            ret = m_valA;
        else
            ret = m_valB;
        return ret;
    }
};

#endif

#ifndef __COPERTFACTORY_H
#define __COPERTFACTORY_H

#include <iostream>
#include "CBaseProduct.h"
#include "CMaxProduct.h"
#include "CMinProduct.h"
#include "CAddProduct.h"

enum EOPERTYPE{OPERADD, OPERMAX, OPERMIN};

class COpertFactory
{
public:
    CBaseProduct* create_product(EOPERTYPE type)
    {
        CBaseProduct* oper = NULL;
        switch (type)
        {
        case OPERADD:
            oper = new CAddProduct;
            break;
        case OPERMAX:
            oper = new CMaxProduct;
            break;
        case OPERMIN:
            oper = new CMinProduct;
            break;
        }
        return oper;
    }
};

#endif

#include <iostream>
#include "COperFactory.h"
#include "CBaseProduct.h"

int main(void)
{
    COpertFactory* fact = new COpertFactory;
    CBaseProduct* oper = fact->create_product(OPERADD);
    oper->setval(10, 20);
    std::cout<<"oper handle:"<<oper->handle()<<std::endl;

    CBaseProduct* opermin = fact->create_product(OPERMIN);
    opermin->setval(3, 5);
    std::cout<<"oper min:"<<opermin->handle()<<std::endl;

    CBaseProduct* opermax = fact->create_product(OPERMAX);
    opermax->setval(100, 1000);
    std::cout<<"oper max:"<<opermax->handle()<<std::endl;

    delete oper;
    delete opermin;
    delete opermax;
    delete face;
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值