应用场景:
1.实现一个支付功能 我们可以有微信,支付宝,银行等支付通道。具相同的支付功能就可以用工厂模式。
//定义的支付接口
public interface PayCommon {
Map<String,Object> payUtil(Map<String,Object> map);
}
//微信支付实现类
public class PayCommonWeChat implements PayCommon{
@Override
public Map<String,Object> payUtil(Map<String,Object> map){
Map<String,Object> returnMap = new HashMap();
//具体实支付的接口
return returnMap;
}
}
//支付宝支付实现类
public class PayCommonAli implements PayCommon{
@Override
public Map<String,Object> payUtil(Map<String,Object> map){
Map<String,Object> returnMap = new HashMap();
//具体实支付的接口
return returnMap;
}
}
//静态工厂类 ,如果增加支付方式则需要修改工厂类,不符合开闭原则
public class FactoryPaySimple {
private static PayCommon payCommon = null;
public static PayCommon pay(String type){
if(type.equals("weChat")){
payCommon = new PayCommonWeChat();
}else if(type.equals("ali")){
payCommon = new PayCommonAli();
}
return payCommon;
}
}
//多方法静态工厂 很方便,无需传参,直接调用对应方法,但也不符合开闭原则
public class FactoryPayStatic {
public static PayCommon weChatPay() {
return new PayCommonWeChat();
}
public static PayCommon aliPay() {
return new PayCommonAli();
}
}
//工厂方法,增加支付方式,添加支付工厂,一个工厂负责一个支付,符合开闭
public abstract class FactoryPay {
abstract PayCommon payUtil();
}
public class FactoryAli extends FactoryPay {
@Override
public PayCommon payUtil() {
return new PayCommonAli();
}
}
public class FactoryWeChat extends FactoryPay {
@Override
public PayCommon payUtil() {
return new PayCommonWeChat();
}
}
//测试
public class Test {
public static void main(String[] args) {
//调用支付
Map<String,Object> map = new HashMap<>();
//简单工厂,提供类型
String payType = "weChat";
FactoryPaySimple.pay(payType).payUtil(map);
//多方法静态工厂
FactoryPayStatic.aliPay().payUtil(map);
FactoryPayStatic.weChatPay().payUtil(map);
//工厂方法
new FactoryAli().payUtil().payUtil(map);
new FactoryWeChat().payUtil().payUtil(map);
}
}