Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2084445
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2009-01-17 08:47:40

工厂方法(Factory Method)模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来。这样,使得客户只关心抽象产品和抽象工厂,完全不用理会返回的是哪一种具体产品,也不用关心它是如何被具体工厂创建的。


UML  结构图

  下面的例子演示了钢笔厂和铅笔厂的工作过程。

Product.h 代码如下:
/*
  描述:Fatory Method Pattern
*/
 #ifndef _PRODUCT_H_
#define _PRODUCT_H_
 #include 
"Factory.h"

class Product
{
public:
    
virtual void Output()=0;
}
;

class Pen:public Product
{
public:
    
void Output();
}
;

class Pencil:public Product
{
public:
    
void Output();
}
;
#endif

Factory.h 代码如下:
#ifndef _FACTORY_H_
#define _FACTORY_H_
#include 
"Product.h"
#include 
<iostream>
#include 
<string>

using namespace std;

class Product;
class Pen;
class Pencil;

class Factory
{
public:
    
virtual Product* Produce()=0;
}
;

class PenFactory:public Factory
{
public:
    Product 
*Produce();
}
;

class PencilFactory:public Factory
{
public:
    Product 
*Produce();
}
;

#endif

Product.cpp 代码如下:
#include "Product.h"

void Pen::Output()
{
    cout
<<"The pen is produced ";
}

void Pencil::Output()
{
    cout
<<"The Pencil is produced ";
}

Factory.cpp 代码如下:
#include "Factory.h"

Product 
* PenFactory::Produce()
{
    
return new Pen();
}


Product 
* PencilFactory::Produce()
{
    
return new Pencil();
}

Main 函数如下:
#include "Factory.h"
#include 
"Product.h"

void main()
{
    Factory 
*factory=new PenFactory();
    Product 
*product=factory->Produce();
    product
->Output();

    factory
=new PencilFactory();
    product
=factory->Produce();
    product
->Output();
}
阅读(1502) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~