一、介绍
工厂方法属于创建型模式,它的特点是将创建方法延迟到子类,由子类工厂决定创建什么产品。
二、类图分析
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(); 如果需要接入新的支付方式,只要创建新的支付产品及工厂即可。
优点:扩展方便,符合开闭原则 缺点:编码较复杂,新的产品需要新的工厂