工厂方法模式
前序
小菜同学有个同学叫薛磊风,他做人很低调,经常去勤工俭学.但不巧的是星期天他走在路上被车撞了,并送进了医院.他在医院中对小菜和他的同学们说,他经常去帮助以为老奶奶,但是现在他被车撞伤了,没办法继续去帮助那位老奶奶了.应此他希望小菜和其他同学能够帮助他去照顾那位老奶奶,如果老奶奶问起他们的名字时不要提任何人的名字,说是学雷锋做好事就行了.
社区志愿者也可以帮助老奶奶,应此帮助老奶奶的对象就可分为(学雷锋的大学生和社区志愿者),请你用工厂方法模式来设计出帮助老奶奶这件事.
工厂方法模式
核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
实现方法(UML类图)
![](http://www.cppblog.com/images/cppblog_com/lwch/FactoryMethod_001.png)
实现代码
#include <stdio.h>
// 雷锋
class LeiFeng
{
public:
void Sweep()
{
printf("扫地\n");
}
void Wash()
{
printf("洗衣\n");
}
void BuyRice()
{
printf("买米\n");
}
};
// 学雷锋的大学生
class Undergraduate : public LeiFeng
{
public:
};
// 社区志愿者
class Volunterr : public LeiFeng
{
public:
};
// 雷锋工厂
class IFactory
{
public:
virtual LeiFeng* CreateLeiFeng()=0;
};
// 学雷锋的大学生工厂
class UndergraduateFactory : public IFactory
{
public:
virtual LeiFeng* CreateLeiFeng()
{
return new Undergraduate();
}
};
// 社区志愿者工厂
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;
}
运行结果
买米
扫地
洗衣
所有文件打包下载
posted on 2011-05-10 19:41
lwch 阅读(1815)
评论(0) 编辑 收藏 引用 所属分类:
设计模式