简单工厂模

niuniuyoung 2020-10-21 07:11:56
1 工厂模式
1.1 模式引出
如何将实例化具体类的代码从应用中抽离出来,或者封装起来,使他们不会干扰应用的其他部分?

Pizza OrderPizza(string type)
{
// 根据pizza的类型,实例化正确的具体类,然后将其赋值给pizza实例变量
if (type.equals("cheese"))
{
pizza = new CheesePizza();
}
else if (type.equals("greek"))
{
pizza = new GreekPizza();
}
else if (type.equals("pepperoni"))
{
pizza = new PepperoniPizza();
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}

现在最好将创建对象移到orderPizza()之外,要把创建pizza的代码移到另一个对象中,由这个新对象专职创建pizza,这个新对象称为
“工厂”。下面就来进行代码实现吧!
1.2 代码实现

class SimplePizzaFactory
{
Pizza createpizza(string type)
{
Pizza pizza = nullptr;
if (type.equals("cheese"))
{
pizza = new CheesePizza();
}
else if (type.equals("greek"))
{
pizza = new GreekPizza();
}
else if (type.equals("pepperoni"))
{
pizza = new PepperoniPizza();
}
return pizza;
}
}

这样似乎只是把问题搬到另一个对象了,问题依然存在。SimplePizzaFactory可以有许多的客户,虽然目前只有orderpizza是它的客
户,可能还有pizzashopmenu,homedelivery。所以把创建披萨的代码包装进类后,当以后实现改变时,只需要修改这个类即可。
1.3 重做PizzaStore类

class PizzaStore
{
SimplePizzaFactory factory;

public PizzaStore(SimplePizzaFactory factory)
{
this.factory = factory;
}

public Pizza OrderPizza(string type)
{
Pizza pizza;

pizza = factory.createpizza(type);

pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
...全文
65 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧