设计模式(2)-- 工厂模式

1. 写在前面

我们首先看一下创建型结构模式。
首先学习一下工厂模式


2. 是什么

工厂模式(Factory Method)是一种创建型的结构模式,专门用来创建对象。
当我们明确的有在不同的场景下,创建不同的对象的需求时候,就需要 工厂模式 了。
其大概的结构如下:

工厂模式

整体上来说,分为4个部分:

  • 工厂接口:创建对象(产品)的接口
  • 工厂(实现) 类:实现工厂接口,创建具体的产品
  • 产品接口:定义产品的功能
  • 产品实现类:实现产品的功能

举一个例子,我们买车的时候,根本不关心这个车是怎么生产出来的。只关心在不同的场景下,想要什么车。
这也就是工厂模式中,用户只要完成对象的实例化,并不关心具体的创建 和 对象的功能实现是如何。

3. 怎么用

我们看一个豪车生产的例子:

// 产品接口
public Interface Car{
      public void drive();
}

// 产品实现
public class Bmw implements Car{
    @Override
    public void drive(){  sout("Driving a Bmw.")}
}

public class Benz implements Car{
    @Override
    public void drive(){  sout("Driving a Benz.")}
}

public class Audi implements Car{
    @Override
    public void drive(){  sout("Driving an Audi.")}
}

// 工厂接口
public Interface Factory{
    public Car create();    // 产品接口就是让工厂接口用的,不然没办法实现“不同场景下生产不同产品”
}

// 工厂实现类
public class BmwFactory implements Factory{
      @Override
      public Car create(){  return new Bmw(); }
}

public class BenzFactory implements Factory{
      @Override
      public Car create(){  return new Benz(); }
}

public class AudiFactory implements Factory{
      @Override
      public Car create(){  return new Audi(); }
}

这里,我们就实现了,在不同的场景下,直接用不同的工厂实现类,来实例化不同的对象。

4. 为什么

从上面的例子来看,我们在使用Car的时候,只需要直接根据使用需求,去调用对应的工厂类来实例化不同的 Car 就行。

这样做的好处如下:

  • 用户不用关注对象的实现,直接实例化就行
  • 如果增加了不同的类型,直接增加对应的工厂类即可,松耦合,不会影响已有的代码

不好的地方无非就是:

  • 需要一些设计,理解上有一些成本

5. 总结

工厂模式总的来说,就是

定义一个创建对象的接口(工厂接口),在工厂实现类(子类)中决定实例化哪一个产品类。
Factory Method使一个类的实例化延迟到其子类。

Ref

https://www.cnblogs.com/henuqin/p/16396960.html

你可能感兴趣的:(设计模式(2)-- 工厂模式)