Version: Next

简单工厂模式

源发问题

每当扩展新产品时,都需要对客户端程序做修改,以适应新产品。

解决方案

简单工厂模式由一个工厂对象决定创建出哪一种产品类的实例

定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)

工厂模式想要 -> 一个集中new对象的地方,一个集中实例化对象的地方

客户端直接找工厂要新产品,将添加新产品的代码转移到简单工厂里做

当要用到大量的创建某种、某类或某批对象时,就会用到简单工厂模式

UML类图

代码

  • 需求:订购披萨
    • 披萨的种类很多(GreekPizz、 CheesePizz等)
    • 披萨的制作流程有preparebakecutbox
    • 完成披萨店订购功能
  • 思路

    把创建Pizza对象封装到一个类中,当有新的Pizza种类时,只需要修改该类就行了,其他创建Pizza对象的代码就不需要修改了

  • 创建工厂类SimpleFactory,所有的OrderPizza直接找工厂要披萨

  1. 有一个披萨店PizzaStore,它可以为客人订指定类型的披萨orderPizza(String type)方法,在Pizza被做出来之前,Pizza都是抽象的,不知道时肉松披萨还是希腊披萨
  1. StaticSimplePizzaFactory(当成SimplePizzaFactory就行了,只是方法改成了静态的)可以生产披萨static Pizza createPizza(String type)方法,根据String type生产具体的Pizza(继承抽象类Pizza的具体披萨类)
  1. 测试调用

    PizzaStore store = new PizzaStore();
    store.orderPizza("cheese")

今后出现新的披萨品种的时候,只需要修改StaticSimpleFactory而不需要修改PizzaStore(Client客户端)的代码

优缺点