本文共 6875 字,大约阅读时间需要 22 分钟。
public interface IStrategy { void algorithm();}
public class Context { private IStrategy mStrategy; public Context(IStrategy mStrategy){ this.mStrategy = mStrategy; } public void algorithm(){ this.mStrategy.algorithm(); }}
public class ConcreteStrategyA implements IStrategy{ @Override public void algorithm() { System.out.println("Strategy A"); }}
public class ConcreteStrategyB implements IStrategy{ @Override public void algorithm() { System.out.println("Strategy B"); }}
public class Test { public static void main(String[] args) { IStrategy strategy = new ConcreteStrategyA(); Context context = new Context(strategy); context.algorithm(); context = new Context(new ConcreteStrategyB()); context.algorithm(); }}
public interface IPromotionStrategy { void doPromotion();}
public class PromotionActivity { private IPromotionStrategy strategy; public PromotionActivity(IPromotionStrategy strategy) { this.strategy = strategy; } public void execute(){ this.strategy.doPromotion(); }}
public class CashbackStrategy implements IPromotionStrategy{ @Override public void doPromotion() { System.out.println("使用返现策略"); }}
public class CouponStrategy implements IPromotionStrategy { @Override public void doPromotion() { System.out.println("使用优惠卷"); }}
public class EmptyStrategy implements IPromotionStrategy{ @Override public void doPromotion() { System.out.println("无优惠"); }}
public class GroupBuyStrategy implements IPromotionStrategy{ @Override public void doPromotion() { System.out.println("3人成团,可以优惠"); }}
public class PromotionStrategyFactory { private static MapPROMOTIONS = new HashMap<>(); private PromotionStrategyFactory(){ } static { PROMOTIONS.put(PromotionKey.COUPON,new CouponStrategy()); PROMOTIONS.put(PromotionKey.CASHBACK,new CashbackStrategy()); PROMOTIONS.put(PromotionKey.GROUPBUY,new GroupBuyStrategy()); } private static final IPromotionStrategy EMPTY = new EmptyStrategy(); public static IPromotionStrategy getPromotionStrategy(String promotionKey){ IPromotionStrategy strategy = PROMOTIONS.get(promotionKey); return strategy == null ? EMPTY : strategy; } private interface PromotionKey{ String COUPON = "COUPON"; String CASHBACK = "CASHBACK"; String GROUPBUY = "GROUPBUY"; } public static Set getPromotionKeys(){ return PROMOTIONS.keySet(); }}
public class Test { public static void main(String[] args) { PromotionStrategyFactory.getPromotionKeys(); String promotionKey = "COUPON"; IPromotionStrategy promotionStrategy = PromotionStrategyFactory.getPromotionStrategy(promotionKey); promotionStrategy.doPromotion(); }}
public abstract class Payment { public abstract String getName(); //通用逻辑放到抽象类里面实现 public MsgResult pay(String uid, double amount){ // 余额是否足够 if(queryBalance(uid) < amount){ return new MsgResult(500,"支付失败","余额不足"); } return new MsgResult(200,"支付成功","支付金额" + amount); } protected abstract double queryBalance(String uid);}
public class AliPay extends Payment{ public String getName(){ return "支付宝"; } @Override protected double queryBalance(String uid) { return 999; }}
public class JDPay extends Payment{ public String getName(){ return "京东支付"; } @Override protected double queryBalance(String uid) { return 988; }}
public class UnionPay extends Payment{ public String getName(){ return "银联支付"; } @Override protected double queryBalance(String uid) { return 1000; }}
public class WechatPay extends Payment { @Override public String getName() { return "微信支付"; } @Override protected double queryBalance(String uid) { return 0; }}
public class PayStrategy { public static final String ALI_PAY = "AliPay"; public static final String JD_PAY = "JDPay"; public static final String WECHAT_PAY = "WechatPay"; public static final String UNION_PAY = "UnionNPay"; public static final String DEFAULT_PAY = ALI_PAY; private static Mapstrategy = new HashMap<>(); static { strategy.put(ALI_PAY,new AliPay()); strategy.put(JD_PAY,new JDPay()); strategy.put(WECHAT_PAY,new WechatPay()); strategy.put(UNION_PAY,new UnionPay()); } public static Payment get(String payKey){ if(!strategy.containsKey(payKey)){ return strategy.get(DEFAULT_PAY); } return strategy.get(payKey); }}
public class MsgResult { private int code; private Object data; private String msg; public MsgResult(int code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } @Override public String toString() { return "MsgResult{" + "code=" + code + ", msg='" + msg + '\'' + ", data=" + data + '}'; }}
public class Order { private String uid; private String orderId; private double amount; public Order(String uid, String orderId, double amount) { this.uid = uid; this.orderId = orderId; this.amount = amount; } public MsgResult pay(){ return pay(null); } public MsgResult pay(String payKey){ Payment payment = PayStrategy.get(payKey); System.out.println("欢迎使用" + payment.getName()); System.out.println("本次交易金额为: " + amount + ".开始扣款"); return payment.pay(uid,amount); }}
*/public class Test { public static void main(String[] args) { Order order = new Order("1","2020092709341212",521); System.out.println(order.pay(PayStrategy.JD_PAY)); }}
转载地址:http://akjrn.baihongyu.com/