简单工厂模式

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;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值