工厂模式

作者: dd85bd3cabef | 来源:发表于2017-05-16 14:57 被阅读3次

一 工厂方法模式#

我们用做披萨来比喻。工厂方法模式由creator,product两个大类组成,分别代表pizzaStore和pizza。通过一个orderPizza方法和一个工厂方法联合起来,就可以形成一个框架。工厂方法将生产知识封装进各个创建者。

1、具体的店##


以创建纽约风味披萨子类为例

  • 实现继承自PizzaStore抽象类的具体子类,为纽约风味的披萨(NYStylePizzaStore)
  • 具体子类实现createPizza方法,负责返回一个Pizza对象,由子类全权负责产生哪个具体pizza
  • 继承自超类的orderpizza方法并不知道这个pizza是由哪个子类产生的,但是它知道pizza可以被烘焙,切片等等公共操作。

同样的,其他风味的披萨具体子类,也是如此创建

2、申明一个工厂方法##


申明工厂方法,并将这个方法传入orderpizza方法中。

protected abstract Pizza CreatePizza(String type)
orederPizza(){
Pizza pizza;
pizza = createPizza;
...
}

工厂方法普遍公式:abstract Product factoryMethod(String type)。

3、如何点披萨呢?##


创建一个你要的风味的披萨店,调用orderPizza方法,传入你相关的配料参数(配置)就好了。
orderPizza不知道处理的是什么披萨,但是它就是进行统一的切片装盘。

披萨

PizzaStore nyPizzaStore = new NYPIzzaStore();
nyPizzaStore.orderPizza("cheese");
//在orderPizza中久调用了createPizza方法
Pizza pizza = createPizza("cheese");

披萨店部分完成,披萨本身呢?

4、pizza抽象类##

pizza本身,把先前公共的cut(),bake()等等公共方法封装起来。并且可以由子类进行覆盖

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的是哪个。工厂方法将类把实例化推迟到了子类中。

工厂模式实现了依赖倒转。倒转了,披萨店对具体披萨的依赖,而使具体披萨店和具体披萨都依赖于一个披萨的抽象

二 原料工厂#

每个具体店生产相同的披萨,都需要面团,酱料,芝士等等。但是具体的配料可能是不同的。

1、创建芝加哥原料工厂##

public class ChicagoIndgredientFactory implements PizzaIngredientFactory{
  public Dough createDough(){
    return new ThickCrustDough;
}
  public Sauce createSauce(){
    return new TomatoSauce;
}
...
}

2、 重做披萨

将原料变量加入抽象类pizza中,并把prepare方法申明为抽象,在具体类中,通过构造方法传入一个披萨原料工厂的抽象。在prepare方法中,通过这个披萨工厂的抽象 ,获得相应的原料,而他根本不关心这些原料来自哪里,这是由披萨店决定的。
这里可以很自然地看出,pizza中传入一个抽象原料工厂,是为了解耦,在具体的披萨店类当中,一定传入的是一个具体的原料工厂对象,从而实现依赖反转。

3、如何实现#

//首先我们需要一个纽约披萨店
PizzaStore nyPizzaStore = new NYPizzaStore;
//接受订单
nyPizzaStore.orderPizza("cheese");
//orderPizza方法首先调用createPizza方法
Pizza pizza = createPizza("cheese");
//当createPizza方法被调用,就开始涉及到原料工厂
Pizza pizza = new CheesePizza(nyIndgredientFactory);
//接下来准备披萨,调用prepare方法对原料进行加工
void prepare(){
  dough = factory.createDough();
...
}
//最后orderPizza方法进行最后的烘烤,切片,装盘

而这一切就是抽象工厂模式,工厂方法模式是抽象工厂模式的一个特殊情况。

相关文章

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 工厂模式

    工厂模式 就是工厂---生产-->产品 在设计模式中,分为 简单工厂模式, 工厂方法模式,抽象工厂模式. 工厂模式...

  • 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

    找女朋友之简单工厂模式,工厂模式,抽象工厂模式 找女朋友之简单工厂模式,工厂模式,抽象工厂模式

  • 【设计模式】- 工厂模式

    工厂模式分为三种:简单工厂模式、工厂方法模式和抽象工厂模式。 工厂模式:靠工厂生产对象 简单工厂模式中只有一个工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • 设计模式-3种工厂模式

    工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 工厂方法根据参数直接创建实例:工厂->产品 ...

  • 设计模式-工厂模式

    工厂模式概念 实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂模式...

  • 第一章2.0工厂- 基础类准备

    2.1工厂-简单工厂模式2.2工厂-工厂方法模式2.3工厂-抽象工厂模式

网友评论

    本文标题:工厂模式

    本文链接:https://www.haomeiwen.com/subject/kvdlxxtx.html