设计模式-工厂方法
工厂方法(Factory Method)
定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。
工厂方法类图
简单工厂中,创建对象的另一个类,在工厂方法中,是由子类来创建对象。
主要角色
- 抽象工厂角色:这个工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口或者必须继承的父类。
- 具体工厂角色:含有和具体业务逻辑有关代码,由应用程序调用以创建具体产品的对象。
- 抽象产品角色:它是具体产品继承的父类或者是实现的接口。
- 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
代码
Factory 抽象工厂方法类
public abstract class Factory { abstract public Product factoryMethod(); public void doSomething() { Product product = factoryMethod(); // do something with the product } }
具体实现类:
public class ConcreteFactory extends Factory { public Product factoryMethod() { return new ConcreteProduct(); } }
具体实现类1:
public class ConcreteFactory1 extends Factory { public Product factoryMethod() { return new ConcreteProduct1(); } }
具体实现类2:
public class ConcreteFactory2 extends Factory { public Product factoryMethod() { return new ConcreteProduct2(); } }
适用场景
如果只有一个类,直接 new 就可以,如果有多个类,而且这些类还需要针对不同的情况来创建哪个对象,这时候需要工厂。将调用方和具体的目标进行解耦,调用方根本就不知道要创建哪个对象。只是提出条件,然后工厂可以给定的条件来决定创建哪个对象。
Java 中有哪些使用了 工厂方法模式
- java.util.Calendar
- java.text.NumberFormat
- java.nio.charset.Charset
- java.net.URLStreamHandlerFactory
- java.util.EnumSet
- javax.xml.bind.JAXBContext