工廠方法模式
前序
小菜同學(xué)有個(gè)同學(xué)叫薛磊風(fēng),他做人很低調(diào),經(jīng)常去勤工儉學(xué).但不巧的是星期天他走在路上被車撞了,并送進(jìn)了醫(yī)院.他在醫(yī)院中對(duì)小菜和他的同學(xué)們說,他經(jīng)常去幫助以為老奶奶,但是現(xiàn)在他被車撞傷了,沒辦法繼續(xù)去幫助那位老奶奶了.應(yīng)此他希望小菜和其他同學(xué)能夠幫助他去照顧那位老奶奶,如果老奶奶問起他們的名字時(shí)不要提任何人的名字,說是學(xué)雷鋒做好事就行了.
社區(qū)志愿者也可以幫助老奶奶,應(yīng)此幫助老奶奶的對(duì)象就可分為(學(xué)雷鋒的大學(xué)生和社區(qū)志愿者),請(qǐng)你用工廠方法模式來設(shè)計(jì)出幫助老奶奶這件事.
工廠方法模式
核心工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建的工作交給子類去做,成為一個(gè)抽象工廠角色,僅負(fù)責(zé)給出具體工廠類必須實(shí)現(xiàn)的接口,而不接觸哪一個(gè)產(chǎn)品類應(yīng)當(dāng)被實(shí)例化這種細(xì)節(jié)。
實(shí)現(xiàn)方法(UML類圖)

實(shí)現(xiàn)代碼
#include <stdio.h>
// 雷鋒
class LeiFeng
{
public:
void Sweep()
{
printf("掃地\n");
}
void Wash()
{
printf("洗衣\n");
}
void BuyRice()
{
printf("買米\n");
}
};
// 學(xué)雷鋒的大學(xué)生
class Undergraduate : public LeiFeng
{
public:
};
// 社區(qū)志愿者
class Volunterr : public LeiFeng
{
public:
};
// 雷鋒工廠
class IFactory
{
public:
virtual LeiFeng* CreateLeiFeng()=0;
};
// 學(xué)雷鋒的大學(xué)生工廠
class UndergraduateFactory : public IFactory
{
public:
virtual LeiFeng* CreateLeiFeng()
{
return new Undergraduate();
}
};
// 社區(qū)志愿者工廠
class VolunterrFactory : public IFactory
{
public:
virtual LeiFeng* CreateLeiFeng()
{
return new Volunterr();
}
};
int main()
{
IFactory* factory = new UndergraduateFactory();
LeiFeng* student = factory->CreateLeiFeng();
student->BuyRice();
student->Sweep();
student->Wash();
delete factory;
delete student;
return 0;
}
運(yùn)行結(jié)果
買米
掃地
洗衣
所有文件打包下載
posted on 2011-05-10 19:41
lwch 閱讀(1840)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
設(shè)計(jì)模式