简单工厂设计模式 C++实现

目录

 

 一、类图

二、建立披萨类

三、披萨的种类

3.1CheesePizza

3.2ClamPizza 

 3.3PepperoniPizza

3.4 VeggiePizza

四、建立披萨工厂

五、建立披萨商店

 六、项目完整实现代码

七、参考资料


 一、类图

二、建立披萨类

Pizza.h

#pragma once
class CPizza
{
public:
	CPizza();
	virtual ~CPizza(void);
public:
	void Prepare();
	void Bake();
	void Cut();
	void Box();
};

 Pizza.cpp

#include "stdafx.h"
#include "Pizza.h"

CPizza::CPizza()
{
}

CPizza::~CPizza(void)
{
}

void CPizza::Prepare()
{

}

void CPizza::Bake()
{

}

void CPizza::Cut()
{

}

void CPizza::Box()
{

}

三、披萨的种类

3.1CheesePizza

CheesePizza.h

#pragma once
#include "Pizza.h"
class CCheesePizza : public CPizza
{
public:
	CCheesePizza(void);
	~CCheesePizza(void);
};

 CheesePizza.cpp

#include "stdafx.h"
#include "CheesePizza.h"


CCheesePizza::CCheesePizza(void)
{
}


CCheesePizza::~CCheesePizza(void)
{
}

3.2ClamPizza 

ClamPizza.h 

#pragma once
#include "Pizza.h"

class CClamPizza : public CPizza
{
public:
	CClamPizza(void);
	~CClamPizza(void);
};

ClamPizza.cpp 

#include "stdafx.h"
#include "ClamPizza.h"


CClamPizza::CClamPizza(void)
{
}


CClamPizza::~CClamPizza(void)
{
}

 3.3PepperoniPizza

PepperoniPizza.h

#pragma once
#include "Pizza.h"

class CPepperoniPizza : public CPizza
{
public:
	CPepperoniPizza(void);
	~CPepperoniPizza(void);
};

PepperoniPizza.cpp 

#include "stdafx.h"
#include "PepperoniPizza.h"


CPepperoniPizza::CPepperoniPizza(void)
{
}


CPepperoniPizza::~CPepperoniPizza(void)
{
}

3.4 VeggiePizza

 VeggiePizza.h

#pragma once
#include "Pizza.h"
class CVeggiePizza : public CPizza
{
public:
	CVeggiePizza(void);
	~CVeggiePizza(void);
};

VeggiePizza.cpp 

#include "stdafx.h"
#include "VeggiePizza.h"


CVeggiePizza::CVeggiePizza(void)
{
}


CVeggiePizza::~CVeggiePizza(void)
{
}

 

四、建立披萨工厂

SimplePizzaFactory.h

class CPizza;
#pragma once
class CSimplePizzaFactory
{
public:
	CSimplePizzaFactory(void);
	~CSimplePizzaFactory(void);
public:
	CPizza* CreatePizza(const CString& strType);
};

SimplePizzaFactory.cpp 

#include "stdafx.h"
#include "SimplePizzaFactory.h"
#include "CheesePizza.h"
#include "PepperoniPizza.h"
#include "ClamPizza.h"
#include "VeggiePizza.h"


CSimplePizzaFactory::CSimplePizzaFactory(void)
{
}


CSimplePizzaFactory::~CSimplePizzaFactory(void)
{
}

CPizza* CSimplePizzaFactory::CreatePizza(const CString& strType)
{
	CPizza* pPizza = nullptr;

	if (strType.Compare(_T("cheese")) == 0)
	{
		pPizza = new CCheesePizza();
	}
	else if (strType.Compare(_T("pepperoni")) == 0)
	{
		pPizza = new CPepperoniPizza();
	}
	else if (strType.Compare(_T("clam")) == 0)
	{
		pPizza = new CClamPizza();
	}
	else if (strType.Compare(_T("veggie")) == 0)
	{
		pPizza = new CVeggiePizza();
	}
	else
	{
		ASSERT(0);
	}

	return pPizza;
}

五、建立披萨商店

PizzaStore.h

#pragma once
class CSimplePizzaFactory;
class CPizza;

class CPizzaStore
{
public:
	CPizzaStore(CSimplePizzaFactory* pFactory);
	~CPizzaStore(void);
public:
	CPizza* OrderPizza(const CString& strType);

private:
	CSimplePizzaFactory* m_pFactory;
};

PizzaStore.cpp 

#include "stdafx.h"
#include "PizzaStore.h"
#include "Pizza.h"
#include "SimplePizzaFactory.h"

CPizzaStore::CPizzaStore(CSimplePizzaFactory* pFactory)
{
	m_pFactory = pFactory;
}


CPizzaStore::~CPizzaStore(void)
{
}


CPizza* CPizzaStore::OrderPizza(const CString& strType)
{
	CPizza* pPizza = nullptr;
	pPizza = m_pFactory->CreatePizza(strType);

	pPizza->Prepare();
	pPizza->Bake();
	pPizza->Cut();
	pPizza->Box();

	return pPizza;
}

 测试

SimpleFactoryDlg.cpp


void CSimpleFactoryDlg::OnBnClickedButtonTest()
{
	// TODO: 在此添加控件通知处理程序代码
	CSimplePizzaFactory* m_pFactor =new CSimplePizzaFactory;
	CPizzaStore pizzaStore(m_pFactor);
	pizzaStore.OrderPizza(_T("cheese"));

	delete m_pFactor;
}
/*   披萨种类

_T("cheese")
_T("pepperoni")
_T("clam")
_T("veggie")

*/

六、项目完整实现代码

https://github.com/mc-liyanliang/Design-patterns/tree/master/SimpleFactory

七、参考资料

《Head First设计模式》

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值