工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫 虚拟构造器 ( Virtual Constructor )模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
概念有点抽象,给大家举个栗子:
铁匠制造武器。精灵需要精灵的武器,兽人需要兽人的武器。根据不同的客户,召唤正确类型的铁匠。
它提供了一种将实例化逻辑委托给子类的方法。
工厂方法模式包含如下角色:
在铁匠那个例子中,武器是抽象产品,精灵的武器和兽人的武器是具体产品;铁匠是抽象工厂,能够打造具体武器的铁匠是具体工厂。
以铁匠为例。首先,我们有一个blacksmith接口和它的一些实现
public interface Blacksmith { Weapon manufactureWeapon(WeaponType weaponType); } public class ElfBlacksmith implements Blacksmith { public Weapon manufactureWeapon(WeaponType weaponType) { return new ElfWeapon(weaponType); } } public class OrcBlacksmith implements Blacksmith { public Weapon manufactureWeapon(WeaponType weaponType) { return new OrcWeapon(weaponType); } }
现在,随着客户的到来,正确类型的铁匠被召集起来,要求制造武器
Blacksmith blacksmith = new ElfBlacksmith(); blacksmith.manufactureWeapon(WeaponType.SPEAR); blacksmith.manufactureWeapon(WeaponType.AXE); // Elvish weapons are created
适合工厂方法模式的情形:
图说设计模式
https://java-design-patterns.com/…