设为首页 加入收藏

TOP

设计模式-工厂方法 简单工厂 抽象工厂 模板方法 (一)
2014-11-23 17:41:27 来源: 作者: 【 】 浏览:57
Tags:设计模式 工厂 方法 简单 抽象 模板

简单工厂模式:
创建多种不同类型的产品,根据传入参数的类型进行创建。
只有一个Creator方法,负责多种不同的产品的创建,传入参数的类型来决定具体创建哪种产品,实现简单,但是如果需要扩展产品的话,就需要修改Creator方法的实现。
有一个Pizza店,可以生产不同种类的Pizza,对于此代码简单如下:
//这是一个抽象的pizza,有很多不同种类的pizza,继承于它。
[cpp]
class AbstractPizza
{
public:
AbstractPizza(void);
virtual ~AbstractPizza(void);
virtual void Taste() = 0;
int m_nPizzaType;
};

class AbstractPizza
{
public:
AbstractPizza(void);
virtual ~AbstractPizza(void);
virtual void Taste() = 0;
int m_nPizzaType;
};

//具体的pizza,继承于抽象pizza。还有其他的多种不同类型的Pizza。
[cpp]
class SimplePizzaFactory
{
public:
enum PizzaType{
CheesePizzaTpe,
GreekPizzaType,
PipperPizzaType,
//..可以继续后续添加
};
SimplePizzaFactory(void);
~SimplePizzaFactory(void);
AbstractPizza* CreatePizzaByType(PizzaType type){
switch (type)
{
case SimplePizzaFactory::CheesePizzaTpe:
{
return new CheesePizza;
//if you want, you can do additional initialization for new CheesePizza;
//like:
//AbstractPizza* pizza = new CheesePizza;
//assert(pizza);
//pizza->Initialize();
}
case SimplePizzaFactory::GreekPizzaType:
{
return new GreekPizza;
//if you want, you can do additional initialization for new CheesePizza;
}
case SimplePizzaFactory::PipperPizzaType:
{
return new PipperPizza;
//if you want, you can do additional initialization for new CheesePizza;
}
default:
break;
}
}
};

class SimplePizzaFactory
{
public:
enum PizzaType{
CheesePizzaTpe,
GreekPizzaType,
PipperPizzaType,
//..可以继续后续添加
};
SimplePizzaFactory(void);
~SimplePizzaFactory(void);
AbstractPizza* CreatePizzaByType(PizzaType type){
switch (type)
{
case SimplePizzaFactory::CheesePizzaTpe:
{
return new CheesePizza;
//if you want, you can do additional initialization for new CheesePizza;
//like:
//AbstractPizza* pizza = new CheesePizza;
//assert(pizza);
//pizza->Initialize();
}
case SimplePizzaFactory::GreekPizzaType:
{
return new GreekPizza;
//if you want, you can do additional initialization for new CheesePizza;
}
case SimplePizzaFactory::PipperPizzaType:
{
return new PipperPizza;
//if you want, you can do additional initialization for new CheesePizza;
}
default:
break;
}
}
};


为了我们更好的管理Pizza的创建过程,一般我们会创建一个管理类,它负责创建不同种类的pizza产品。通过SimplePizzaFactory工厂的管理,我们通过传入不同的类型就可以不同种类的pizza产品,外部的调用者只需要传入类型,Creator方法就会返回正确的AbstractPizza的具体类型。甚至于你可以将SimplePizzaFactory定义为单例模式(如果工厂需要数据成员的话)便于以全局变量的方式使用。或者将CreatePizzaByType定义为静态方法(如果没有相关任何数据成员),这样的话就不用创建任何工程对象,直接SimplePizzaFactory::CreatePizzaByType(nPizzaType)就可以,操作更简答。它既然叫简单工厂,确实足够简单,只有一个Creator方法(不过不能叫做工厂方法,注意没有继承),当有新的产品添加进来,必须需要修改Creator方法,以满足新的产品创建的需要,不过说实话这种简单工厂模式对于平常的很多程序都足够。
[cpp]
class SimplePizzaFactory
{
public

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4554 叛逆的小明 下一篇UVA 12529 Fix the Pond(bfs)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 教程 - W3Sch (2025-12-26 12:00:51)
·Python基础教程,Pyt (2025-12-26 12:00:48)
·神仙级python入门教 (2025-12-26 12:00:46)
·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)