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

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);
    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值