一、介绍
工厂方法属于创建型模式,它的特点是将创建方法延迟到子类,由子类工厂决定创建什么产品。
二、类图分析
Client:用户类
PayApi:父产品,支付api的顶层接口类
AliPayApi:子产品,实现了PayApi接口方法的类
WechatPayApi:子产品,实现了PayApi接口方法的类
PayApiFactory:父工厂,一个抽象类,子类需要重写createPayApi()方法去创建产品
AliPayApiFactory:子工厂,重写createPayApi()方法创建AliPayApi产品
WechatPayApiFactory:子工厂,重写createPayApi()方法创建WechatPayApi产品
三、代码实现
public interface PayApi {
void pay();
}
public class AliPayApi implements PayApi{
@Override
public void pay() {
System.out.println("AliPay");
}
}
public class WechatPayApi implements PayApi{
@Override
public void pay() {
System.out.println("WechatPay");
}
}
public abstract class PayApiFactory {
abstract PayApi createPayApi();
public void pay() {
createPayApi().pay();
}
}
public class AliPayApiFactory extends PayApiFactory {
@Override
PayApi createPayApi() {
return new AliPayApi();
}
}
public class WechatPayApiFactory extends PayApiFactory{
@Override
PayApi createPayApi() {
return new WechatPayApi();
}
}
本次demo以支付为例,使用时只要调用
PayFactory payFactory = new WechatPayFactory();
payFactory.pay();
如果需要接入新的支付方式,只要创建新的支付产品及工厂即可。
优点:扩展方便,符合开闭原则
缺点:编码较复杂,新的产品需要新的工厂