工厂模式

Posted noino

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式相关的知识,希望对你有一定的参考价值。

工厂模式:  应该有三类, 让我们循序渐进, 利用工厂模式来开一个pizza店

  工厂模式是用来解决new 的问题. 当你new出一个对象的时候你想到的是什么? 想到的是"具体", 实在实例化一个具体类, 用的是实现, 而不是接口, 代码绑定具体类会让代码更脆弱,更缺乏弹性. --->针对接口编程, 可以隔离掉以后系统可能发生的一大堆改变;    为什么呢? 如果是针对接口写的, 可以通过多态, 它可以与任何新类实现该接口;

第一步: 简单工厂方法---> 就一个pizza店嘛, 然后从pizza工厂取pizza, 然后按照流程制作pizza

public class PizzaStore {

    public Pizza orderPizza() {
        Pizza pizza = new PizzaFactory().createPizza("chessPizza");

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;

    }
}

public class PizzaFactory {
  /*传进来什么类型的pizza, 就返回什么类型的pizza/
    public Pizza createPizza(String style) {
        Pizza pizza = null;
        if (style.equals("chessPizza")) {
            return new ChessPizza();
        } else if (style.equals("seaFoodPizza")){
            return new SeaFoodPizza();
        }
        return pizza;
    }
}

那么这里肯定有疑问了, 你不就把new 具体pizza的代码换了个地方吗? -----> 哈哈, 别忘了, 除了你这里可以用这个工厂, 其他地方也可以用这个工厂, 而且把所有的pizza对象都统一到工厂对象来管理了. 当然还有静态工厂, 静态工厂不能通过继承来改变创建对象的方法(缺点吧);

OK,到这里你已经成功开启了一家pizza店, 而且你也不需要自己生产pizaa,想要哪种类型的pizza问pizzaFactory要就行了.

 2. 随着你的加盟店的扩大, 有newyork加盟店, chigaco加盟店, 不同的地区有不同口味的pizza, 当然可以给每个地区加盟店都配备一个自己专属工厂. 

  但你发现这些加盟店虽然用了你的工厂获取pizza对象, 可加工pizza的方式却不尽相同,为了统一pizza的加工流程, (希望把加盟店和创建pizza捆绑在一起的同时又使代码有一定的弹性), 该工厂方法出马了;

 

public abstract class PizzaStore {
/*加盟点都来继承这个抽象的pizzaStore, 那么他们既可以随自己生产pizza, 又可以按照统一的流程加工pizza*/
    public Pizza orderPizza(String type) {
        Pizza pizza;

        pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return pizza;

    }
  /*将创建pizza的方法不再独立交给工厂, 而是抽象出来, 让子类去决定产生什么类型的pizza*/
    protected abstract Pizza createPizza(String type);
}

 

3.还有一个抽象工厂模式, 想象一下, 在pizza的prepare阶段, 使用不同的配料, 当然不能自己去new, 而是利用工厂方法, 让子类去判断用什么配料, 而这一套配料(其实就是一家族的对象), 可以交给配料工厂来生产-------->简单工厂 + 工厂方法 -----> 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类; 自己去感受吧

 

 

 

以上是关于工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式学习——简单工厂模式工厂模式抽象工厂模式

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式-简单工厂工厂方法模式抽象工厂模式详解

C++工厂模式(简单工厂工厂方法抽象工厂)