结构示意图

角色
优点:
缺点:
适用环境:
支付场景中,选择不同的支付方式
/**
* 支付策略接口
*/
public interface IPayStrategy {
void pay(Order order);
}
/**
* 微信支付
*/
public class WeChatPay implements IPayStrategy{
@Override
public void pay(Order order) {
System.out.println("微信收款"+order.getAmount()+"元");
}
}
/**
* 支付宝支付
*/
public class ALiPay implements IPayStrategy{
@Override
public void pay(Order order) {
System.out.println("支付宝到账"+order.getAmount()+"元");
}
}
/**
* 支付上下文
*/
public class PayContext {
private IPayStrategy payStrategy;
Map<String,IPayStrategy> map= new HashMap<>();
private PayContext(){
map.put("支付宝支付",new ALiPay());
map.put("微信支付",new WeChatPay());
}
/**
* 饿汉式 单例模式
*/
private static PayContext payContext=new PayContext();
public static PayContext getInstance(){
return payContext;
}
//获取策略实例
public IPayStrategy getPayStrategy(Order order) {
return map.get(order.getPaymentType());
}
}
/**
* 订单类
*/
@Data @AllArgsConstructor @NoArgsConstructor
public class Order {
/**
* 金额
*/
private int amount;
/**
* 支付类型
*/
private String paymentType;
}
public static void main(String[] args) {
PayContext context = PayContext.getInstance();
Order orderWeChat=new Order(1,"微信支付");
Order orderALi=new Order(2,"支付宝支付");
IPayStrategy weichatPayStrategy = context.getPayStrategy(orderWeChat);
IPayStrategy aLiPayStrategy = context.getPayStrategy(orderALi);
weichatPayStrategy.pay(orderWeChat);
aLiPayStrategy.pay(orderALi);
}
测试结果
微信收款1元
支付宝到账2元