1.工厂模式有三种:简单工厂模式、工厂方法模式和抽象工厂模式。
1.1 简单工厂模式:
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
1.2 工厂方法模式:
工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。讲白了,就是每种类型都有自己的工厂类,而这些工厂类又都有相同的接口,在使用的同时,对象类型也来自共同的接口。
public interface Moveable {
void run();
}
public class Plane implements Moveable {
@Override
public void run() {
System.out.println("扇着翅膀前进中plane....");
}
}
public class PlaneFactory extends VehicleFactory{
public Moveable create() {
return new Plane();
}
}
VehicleFactory factory = new PlaneFactory();
Moveable m = factory.create();
m.run();
1.3 抽象工厂模式
抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。讲白了,就是将一系列生成产品的方法放在一个类中,面向的是一个产品族,这些方法的返回类型分别是各种产品的接口或抽象类。
2. 静态工厂方法:
根据定义和思想,凡是能生成对象的方法都称为工厂方法,从单例模式中可以看出,单例模式中的getInstance()方法也会返回对象,也可称为静态工厂方法。此称呼是后面别人对设计模式进行细化而起的名称。另外,单例模式一般返回一个对象,当返回对象的列表时,称为多例。
3. 工厂方法和抽象工厂比较:
工厂方法面向的是单个产品(对象)层面,零散的一个个类型,每次新增对象类型都需要新增对应的工厂,会出现工厂泛滥的情况。而抽象工厂面向的是多个产品层面(类似于产品线),将多个产品对象括起来,形成一个工厂组,一定程度上减少工厂泛滥,但若想增加一种产品,就需要对所有继承此工厂组的类中增加新类型。比较麻烦。