设为首页 加入收藏

TOP

设计模式-工厂方法 简单工厂 抽象工厂 模板方法 (二)
2014-11-23 17:41:27 来源: 作者: 【 】 浏览:58
Tags:设计模式 工厂 方法 简单 抽象 模板
:
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;
}
}
};

工厂方法模式:
对扩展开放,对修改关闭,对于上面的简单工厂,creator方法以后可能需要修改,因此我们可以通过将要改的方面单独提炼出来。这就构造出了工厂方法模式。有一个抽象的工厂方法,它的出现将外部的调用统一化,由具体的工厂负责产品的创建过程。工厂方法模式就是将产品的创建过程延迟到子类,由子类负责具体的产品创建,而且一种工厂只生产一种产品。具体工厂和具体产品一一对应,抽象的Creator方法和抽象的产品对应。
这经常用在抽象类中,专为创建对象定义一个方法。子类就可以覆盖这个方法来定义要创建的特定对象。通常与模板方法和并使用,模板方法在定义模板算法时一般需要先创建产品,然后再利用产品的方法创建一个流程。

一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。

还用上面的例子,现在首先需要一个抽象的Creator方法,你可以把它看成一个抽象工厂,其实也是它是一个特殊的抽象工厂,只生产一种产品.
不过下面的比普通的工厂方法模式又稍微高级了一点,它是参数化的工厂方法模式,灵活性更大。
[cpp]
class PizzaFactory
{
public:
enum PizzaType{
CheesePizzaTpe,
GreekPizzaType,
PipperPizzaType,
};
PizzaFactory(void);
~PizzaFactory(void);
AbstractPizza* PizzaFactory(PizzaType type)();
};

//具体的工厂,负责生产BeiJing的pizza。
class BeiJingPizzaFactory : public PizzaFactory
{
public:


BeiJingPizzaFactory(void);
~BeiJingPizzaFactory(void);
AbstractPizza* CreatePizzaByType(PizzaType type)(){
switch (type){
case PizzaFact

首页 上一页 1 2 3 4 下一页 尾页 2/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)