您的位置:首页 > 其它

策略模式+简单工厂-实际应用场景

2019-01-11 15:29 78 查看

1、抽象策略接口

[code]//抽象出他们共有的行为(支付行为)
//从调用微信、支付宝、银联卡可以抽出一个公共的策略接口,同时也是为了实现定义中的互换
public interface PayStrategy {
public void pay(float money);
}

2、实现具体的策略

[code]//支付宝支付的行为具体实现
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角色

[code]public class ContextStrategy {

private PayStrategy strategy;

public void payout(float money){
strategy.pay(money);//调用策略
}
public void setStrategy(PayStrategy strategy){
this.strategy=strategy;//设置策略类
}
}

4、结合简单工厂模式

[code]//负责实例化对应产品的对象
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、测试

[code]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);
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: