设计模式---简单类工厂

 在编程学习过程中,开始是随性的写,觉得只要能实现自己想要的功能,便可完事。当需求发生改变时,乐此不彼地修改凌乱的代码,没有领悟到编程这门艺术,只是一个代码搬运工。慢慢去阅读一些书籍,发现自己知道的东西太少,思想过于简单,考虑问题比较单一。希望能通过每天的学习去充实自己,并将这些点滴记录下来。
 今天就开始设计模式的学习,设计模式是一种解决问题的方式,针对不同的场景使用一种或者多种设计模式解决问题。首先,介绍一下比较简单的设计模式类工厂,从表面意思来看,生产类实例的工厂。就好比一个鞋厂,可以生产各式各样的鞋子,具体类实现如下:
鞋基类:
#pragma once
class CShoe
{
public:
    virtual ~CShoe();
    const char* getBrand();
protected:
    CShoe();    
protected:
    char* m_strBrand;
};

#pragma once
#include "shoe.h"
class CNikeShoe :
    public CShoe
{
public:
    CNikeShoe();
    ~CNikeShoe();
};
#include "shoe.h"


CShoe::CShoe()
{
    m_strBrand = "";
}


CShoe::~CShoe()
{
}

const char* CShoe::getBrand()
{
    return m_strBrand;
}

阿迪达斯鞋类
#pragma once
#include "shoe.h"
class CAdidasShoe :
    public CShoe
{
public:
    CAdidasShoe();
    ~CAdidasShoe();
};
#include "adidasshoe.h"


CAdidasShoe::CAdidasShoe()
{
    m_strBrand = "Adidas";
}


CAdidasShoe::~CAdidasShoe()
{
}

Nike鞋类型
#pragma once
#include "shoe.h"
class CNikeShoe :
    public CShoe
{
public:
    CNikeShoe();
    ~CNikeShoe();
};

#include "nikeshoe.h"


CNikeShoe::CNikeShoe()
{
    m_strBrand = "Nike";
}


CNikeShoe::~CNikeShoe()
{
}

鞋工厂类
#pragma once
#include "shoe.h"
class CShoeFactory
{
public:
    CShoeFactory();
    ~CShoeFactory();

    CShoe* createShoe(int iType);
};

#include "shoefactory.h"
#include "nikeshoe.h"
#include "adidasshoe.h"
CShoeFactory::CShoeFactory()
{
}


CShoeFactory::~CShoeFactory()
{
}

CShoe* CShoeFactory::createShoe(int iType)
{
    CShoe* pShope = 0;
    switch (iType)
    {
    case 0:
        pShope = new CNikeShoe();
        break;
    case 1:
        pShope = new CAdidasShoe();
        break;
    default:
        break;
    }
    return pShope;
}

调用
#include <iostream>
#include "shoefactory.h"

using namespace std;

int main(int argc, char** argv)
{
    CShoeFactory* pShoeFactory = new CShoeFactory();
    CShoe* pShoe = pShoeFactory->createShoe(0);
    if (pShoe)
    {
        cout << pShoe->getBrand() << endl;
        delete pShoe;
    }
    pShoe = pShoeFactory->createShoe(1);
    if (pShoe)
    {
        cout << pShoe->getBrand() << endl;
        delete pShoe;
    }
    cin.get();
    return 0;
}

此模式结构简单,但每次扩展新类型需要修改工厂类,违背了软件设计的开发-封闭原则,一般用于教简单的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值