1、抽象策略接口
//抽象出他们共有的行为(支付行为)
//从调用微信、支付宝、银联卡可以抽出一个公共的策略接口,同时也是为了实现定义中的互换
public interface PayStrategy {
public void pay(float money);
}
2、实现具体的策略
//支付宝支付的行为具体实现
public class AliPayStrategy implements PayStrategy {
@Override
public void pay(float money) {
//调用支付宝的接口具体代码 略...
if(money<=200){
System.out.println("通过调用支付宝的接口"+"直接支付了"+money);
}else{
System.out.println("通过调用支付宝的接口"+"输入密码验证再支付了"+money);
}
}
}
//微信支付的行为具体实现
public class WeChatPayStrategy implements PayStrategy {
@Override
public void pay(float money) {
//调用微信的接口略。。。。
System.out.println("通过调用微信支付的接口支付了"+money);
}
}
3、实现ContextStrategy角色
public class ContextStrategy {
private PayStrategy strategy;
public void payout(float money){
strategy.pay(money);//调用策略
}
public void setStrategy(PayStrategy strategy){
this.strategy=strategy;//设置策略类
}
}
4、结合简单工厂模式
//负责实例化对应产品的对象
public class Factory {
public static final String TYPE_ALI="ali";
public static final String TYPE_WECHAT="wechat";
private Factory() { }
public static PayStrategy create(String type){
PayStrategy product=null;
if(TYPE_ALI.equals(type)){
product=new AliPayStrategy();
}else if(TYPE_WECHAT.equals(type)){
product=new WeChatPayStrategy();
}
return product;
}
}
5、测试
public class Client {
public static void main(String[] args) {
ContextStrategy strategy = new ContextStrategy();
strategy.setStrategy(new AliPayStrategy());
strategy.payout(1000f);
strategy.setStrategy(new WeChatPayStrategy());
strategy.payout(20f);
//结合简单工厂模式
PayStrategy payStrategy=Factory.create(Factory.TYPE_ALI);
payStrategy.pay(1000.0f);
payStrategy=Factory.create(Factory.TYPE_WECHAT);
payStrategy.pay(20.0f);
}
}