一、定义
1.1 工厂方法模式
工厂方法模式,又称工厂模式
着重于方法,一个工厂只有一个方法,生产一种产品
。
(我称之为,单方法工厂模式)
abstract class BaseFactory {
abstract <T extends BaseProduct> T createProduct(Class<T> c);
}
工厂方法模式可以引申为简单工厂模式
、多工厂模式
:
简单工厂:去除抽象类,只保留一个具体工厂类。
多工厂:去除类型参数,根据每个参数产生一个具体工厂。
1.2 抽象工厂模式
着重于工厂,一个工厂有多个方法,生产多种产品
。
(我称之为:多方法工厂模式)
abstract class BaseFactory {
abstract BaseProductA createProductA();
abstract BaseProductB createProductB();
}
二、类图
三、实例
3.1 Retrofit(2.5.0)
RequestFactory
:
final class RequestFactory {
okhttp3.Request create(Object[] args) {
...
return requestBuilder.get()
.build();
}
}
RequestFactory 是一个简单工厂,工厂中
又使用了构建者模式(requestBuilder)来构建一个产品。
CallAdapter.Factory
:
public interface CallAdapter<R, T> {
...
abstract class Factory {
public abstract @Nullable CallAdapter<?, ?> get(Type returnType, Annotation[] annotations, Retrofit retrofit);
}
}
Converter.Factory
:
public interface Converter<F, T> {
...
abstract class Factory {
public Converter<ResponseBody, ?> responseBodyConverter(...){}
public Converter<?, RequestBody> requestBodyConverter(...){}
public Converter<?, String> stringConverter(...){}
}
}
Converter.Factory 是一个多方法工厂模式。
3.2 Okhttp3(3.12.0)
Call.Factory
:
public interface Call extends Cloneable {
...
interface Factory {
Call newCall(Request request);
}
}
3.3 Glide(4.9.0)
TransitionFactory
:
public interface TransitionFactory<R> {
Transition<R> build(DataSource dataSource, boolean isFirstResource);
}
public class DrawableCrossFadeFactory implements TransitionFactory<Drawable> {
public Transition<Drawable> build(DataSource dataSource, boolean isFirstResource) {
...
}
public static class Builder {
...
public DrawableCrossFadeFactory build() {
return new DrawableCrossFadeFactory(durationMillis, isCrossFadeEnabled);
}
}
}
DrawableCrossFadeFactory 是一个工厂,同时工厂外
使用了构建者模式(DrawableCrossFadeFactory.Builder)来构建一个工厂。