您的位置:首页 > 其它

设计模式--创建型-FactoryMethod(工厂方法)

2013-10-31 23:07 836 查看
 

 

 

设计模式--创建型-FactoryMethod(工厂方法)
 

 

 

1. 意图

 

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

 

 

 

2. 结构图

 



 

 

 

3. 简述

 

工厂方法是负责“生产”一个对象的函数。客户只需要调用Creator的工厂方法FactoryMethod()就可以得到一个ConcreteProduct的实例指针,而无需知道ConcreteProduct类的定义。

Creator可以是个抽象类,具体的FactoryMethod()是在内部的ConcreteCreator中实现;也可以是个具体类,FactoryMethod()提供一个默认的实现,这种情况一般不用。

工厂方法FactoryMethod也可以有参数,比如一个enum参数,使得客户可以通过不同的enum参数来控制生成不同的具体产品类。

 

 

4. 实例代码

 

4.1 对外的接口的定义,给客户Client使用

 

// 抽象产品类
class AbstractProduct
{
public:
virtual ~AbstractProduct() {}
};

// 创建者类,定义一个工厂方法,可以是个纯虚函数,也可以有个默认的实现
class Creator
{
public:
Creator() {}
virtual ~Creator() {}
virtual AbstractProduct* FactoryMethod() { return NULL; }
};


 
 

4.2 内部的实现类,外部无法看到

 

// 具体产品类
class ConcreteProduct : public AbstractProduct
{
public:
ConcreteProduct() {}
~ConcreteProduct() {}
};

// 具体创建者类,重载工厂方法,生产一个具体的产品类实例
class ConcreateCreator : public Creator
{
public:
ConcreateCreator() {}
~ConcreateCreator() {}
AbstractProduct* FactoryMethod()
{
return new ConcreteProduct();
}
};


 

 

4.3 客户程序

 
int main ()
{
Creator* pCreator = new ConcreateCreator;
AbstractProduct* pProduct = pCreator->FactoryMethod();
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: