随笔-91  评论-137  文章-0  trackbacks-0

工厂方法模式

前序

小菜同学有个同学叫薛磊风,他做人很低调,经常去勤工俭学.但不巧的是星期天他走在路上被车撞了,并送进了医院.他在医院中对小菜和他的同学们说,他经常去帮助以为老奶奶,但是现在他被车撞伤了,没办法继续去帮助那位老奶奶了.应此他希望小菜和其他同学能够帮助他去照顾那位老奶奶,如果老奶奶问起他们的名字时不要提任何人的名字,说是学雷锋做好事就行了.

社区志愿者也可以帮助老奶奶,应此帮助老奶奶的对象就可分为(学雷锋的大学生和社区志愿者),请你用工厂方法模式来设计出帮助老奶奶这件事.

工厂方法模式

核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

实现方法(UML类图)

实现代码

#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 阅读(1821) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理