简单记录一下,策略工厂模式
例子:两种支付方式,根据不同的type进不同的方法
首先编写抽象类(用抽象类主要是想在把一些公共重复的代码放在抽象类里)
public abstract class AbstractPay implements InitializingBean{
public abstract void pay();
protected String anstractPay(){
return "我是abstract";
}
}
Enum
public enum PayTypeEnum {
VX("微信支付", "vx"),
BANK("银联支付", "bank");
// 成员变量
private String text;
private String type;
// 构造方法
PayTypeEnum(String text, String type) {
this.text = text;
this.type = type;
}
public String getValue() {
return type;
}
@Override
public String toString() {
return this.text+"_"+this.type;
}
}
然后是具体实现类
/**
* 微信支付
*/
@Service
public class VxPayService extends AbstractPay{
@Override
public void pay() {
System.out.println(anstractPay());
}
@Override
protected String anstractPay(){
return "VXpay";
}
@Override
public void afterPropertiesSet() throws Exception {
PayFactory.register(PayTypeEnum.VX.getValue(), this);
}
}
/**
* 银联支付
*/
@Service
public class BankPayService extends AbstractPay {
@Override
public void pay() {
System.out.println(super.anstractPay());
}
@Override
public void afterPropertiesSet() throws Exception {
PayFactory.register(PayTypeEnum.BANK.getValue(), this);
}
}
最后是编写工厂类
@Component
public class PayFactory {
private static Map<String,AbstractPay> services = new ConcurrentHashMap<String,AbstractPay>();
public static AbstractPay getPayType(String type){
return services.get(type);
}
public static void register(String type,AbstractPay abstractPay){
services.put(type,abstractPay);
}
}