工场模子——纯粹工场和形式

母婴用户    2019-11-01 08:59     浏览 33333 

  书上举的例子是关于pizza的,例子很形象。工厂模型的目的就是要“对扩展开放,对修改封闭”。

  针对接口编程,可以隔离掉以后系统可能发生的一大堆改变。如果针对接口编程,那么可以通过多态,它可以与任何新类实现该接口。但,当代码使用大量的具体时,就麻烦了,你要不断地修改代码。

  比如说Pizza店类的点餐orderPizza()方法,首先,当然要确定是点哪种pizza

  注意:pizza店肯定不止这两种pizza,所以需要修改代码。我们何不把他们放到一个工厂里面,让工厂帮我们生产pizza,这样pizza店就不用修改代码了。

工场模子——纯粹工场和形式

  简单工厂,但它不是一个设计模块式,反而比较像是一种编程习惯。但很多开发人员误认为它是“工厂模式”

  要注意的是:Factory要在构造器中初始化。这里要能想到我们平常遇到的Java自带的类中也有类似的东西。比如说:我们在做Java Web开发的时候,经常要写ServiceImpl类(服务层)和DaoImpl类(即持久层),这里Service中就要用到Dao作为Factory。而Action把Service当做Factory。但这个实际上是抽象工厂方法,而不是工厂方法,后面会讲到两者的区别。

  现在我们将factory虚拟化,没有真正的factory类,但是createPizza()方法正是工厂方法,用来制造产品。

  定义了一个创建对象的接口,但由子类来决定来实例化哪个类。工厂方法让类把实例化推迟到子类。

  这里希望不要误解,所谓的“决定”并不是模式允许子类本身在运行时决定,而是指在编写创建类时,不需要知道实际创建的产品是哪一个,选择了使用哪个子类,自然就决定了实际创建了什么。