目录
一、类图
二、建立披萨类
三、披萨的种类
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()
{
}
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)
{
}
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)
{
}
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)
{
}
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设计模式》