JDK设计模式(二)工厂模式

工厂模式是我们最常用的实例化对象模式,使用工厂方法代替new操作的一种模式,使用工厂模式,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

1、简单工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,

可以理解为是不同工厂模式的一个特殊实现。

20150123010211 96890

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

使用场景

1、工厂类负责创建的对象比较少;

2、客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

3、由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

JDK 中使用的简单工厂

代替构造函数创建对象,方法名比构造函数清晰

如Integer.valueOf,Class.forName等方法

2、工厂方法模式

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

20150123010237 57106

JDK 中使用的工厂方法

20150123010248 25395

如上图所示,ArrayList和LinkedList使用具体的工厂类的iterator方法,分别创建实现Iterator接口类的ArrayList$Itr和ArrayList$ListItr,以及LinkedList$ListItr的具体产品类。

3、抽象工厂模式

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或关心)实际产出的具体产品是什么。这样一来,客户就从具体的产品中被解耦。

抽象工厂的方法经常以工厂方法的方式实现,抽象工厂的任务是定义一个负责创建一组产品的接口。这个接口内的每个方法都负责创建一个具体产品,

同时利用实现抽象工厂的子类来提供这些具体的做法,所以在抽象工厂中利用工厂实现生产方法是相当自然在做法。

20150123010301 20898

JDK 中使用的抽象工厂

20150123010313 54249

总结

1、 所有的工厂都是用来封装对象的创建。

2、 简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦。

3、 工厂方法,使用继承,把对象的创建委托给子类,由子类来实现工厂方法来创建对象。

4、 抽象工厂,使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中。

文章目录
  1. 1、简单工厂模式
  2. 2、工厂方法模式
  3. 3、抽象工厂模式
  4. 总结