设计模式23篇之 简单工厂模式

基本介绍

  1. 简单工厂模式是属于创建型模式,但不属于 23 种 GOF 设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
  2. 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
  3. 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式.

需求

看一个披萨的项目:要便于披萨种类的扩展,要便于维护,完成披萨订购功能。
披萨抽象类的设计,如下:
在这里插入图片描述

传统解决方案

class OrderPizza {
  var orderType: String = _
  var pizza: Pizza = _
  breakable {
    do {
      println("请输入pizza的类型")
      orderType = StdIn.readLine()
      if (orderType.equals("greek")) {
        this.pizza = new GreekPizza
      } else if (orderType.equals("pepper")) {
        this.pizza = new PepperPizza
      } else {
        break()
      }
      this.pizza.prepare()
      this.pizza.bake()
      this.pizza.cut()
      this.pizza.box()
    } while (true)
  }
}
传统的方式的优缺点
  1. 优点是比较好理解,简单易操作。
  2. 缺点是违反了设计模式的 ocp 原则,即对扩展开放对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码.
  3. 比如我们这时要新增加一个 Pizza 的种类(Cheese 披萨),我们需要在多出做修改
简单工厂例子:

生产对象的逻辑抽象到一个类中, 解耦, 代码重用性高:

object SimpleFactory {

  //提供了一个创建Pizza的方法,有需要创建Pizza调用该方法即可
  def createPizza(t: String): Pizza = {
    var pizza: Pizza = null
    if (t.equals("greek")) {
      pizza = new GreekPizza
    } else if (t.equals("pepper")) {
      pizza = new PepperPizza
    } else if (t.equals("cheese")) {
      pizza = new CheesePizza
    }
    return pizza
  }

}
外部调用示例:
class OrderPizza {

  var orderType: String = _
  var pizza: Pizza = _
  breakable {
    do {
      println("请输入pizza的类型 使用简单工厂模式~~")
      orderType = StdIn.readLine()
      pizza = SimpleFactory.createPizza(orderType)
      if (pizza == null) {
        break()
      }
      this.pizza.prepare()
      this.pizza.bake()
      this.pizza.cut()
      this.pizza.box()
    } while (true)
  }
}
发布了125 篇原创文章 · 获赞 238 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/103535750