概述
- 工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构。
- 定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。 - 工厂方法模式是一种类创建型模式。
- 学习难度:★★☆☆☆
- 使用频率:★★★★★
优缺点
- 优点
- 用工厂方法统一管理工厂生产,不需要在一个工厂类中扩展代码。可扩展比较好。
- 缺点
- 数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象。
类图
组成角色
- 抽象工厂类角色(Factory)
- 具体工厂类角色(ConcreteFactory)
- 抽象产品角色(Product)
- 具体产品角色(ConcreteProduct)
Code Example
抽象工厂类角色(Factory)
public interface CarFactory {
public Car createCar();
}
具体工厂类角色(ConcreteFactory)
public class AudoCarFactory implements CarFactory {
public Car createCar() {
return new Audo();
}
}
public class BenzCarFactory implements CarFactory {
public Car createCar() {
return new Benz();
}
}
public class BmwCarFactory implements CarFactory {
public Car createCar() {
return new Bmw();
}
}
抽象产品角色(Product)
public interface Car {
public void driver();
}
具体产品角色(ConcreteProduct)
public class Audo implements Car {
public void driver() {
System.out.println("audo drive");
}
}
public class Benz implements Car {
public void driver() {
System.out.println("benz drive");
}
}
public class Bmw implements Car {
public void driver() {
System.out.println("bmw drive");
}
}
客户端
public class FactoryMethod {
public static void main(String[] args) {
CarFactory factory = new BenzCarFactory();
Car car = factory.createCar();
car.driver();
}
}