在编程学习过程中,开始是随性的写,觉得只要能实现自己想要的功能,便可完事。当需求发生改变时,乐此不彼地修改凌乱的代码,没有领悟到编程这门艺术,只是一个代码搬运工。慢慢去阅读一些书籍,发现自己知道的东西太少,思想过于简单,考虑问题比较单一。希望能通过每天的学习去充实自己,并将这些点滴记录下来。
今天就开始设计模式的学习,设计模式是一种解决问题的方式,针对不同的场景使用一种或者多种设计模式解决问题。首先,介绍一下比较简单的设计模式类工厂,从表面意思来看,生产类实例的工厂。就好比一个鞋厂,可以生产各式各样的鞋子,具体类实现如下:
鞋基类:
#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;
}
此模式结构简单,但每次扩展新类型需要修改工厂类,违背了软件设计的开发-封闭原则,一般用于教简单的程序。