#Java 设计模式# 使用策略模式实现不同的支付方式

439 阅读1分钟

先上代码

abstract class Payment{
    public abstract void pay(int count);
}

/** 支付宝 **/
class AliPay extends Payment{
    
    @Override
    public void pay(int count){
        System.out.println("使用支付宝支付" + count + "元");
    }
}

/** 微信支付 **/
class WeChatPay extends Payment{
    
    @Override
    public void pay(int count){
        System.out.println("使用微信支付" + count+ "元" );
    }
}

/** 银联支付 **/
class UnionPay extends Payment{
    
    @Override
    public void pay(int count){
        System.out.println("使用银联支付"+ count+ "元");
    }
}

class UnkonwnPay extends Payment{
    
    @Override
    public void pay(int count){
        System.out.println("未选定支付方式,请选定后尝试");
    }
}

class PayFactory{
    
    public static Payment getInstance(String type){
        if("AliPay".equals(type)){
            return new AliPay();
        } else if("WeChatPay".equals(type)){
            return new WeChatPay();
        } else if("UnionPay".equals(type)){
            return new UnionPay();
        }
        return new UnkonwnPay();
    }
}

public class Main{
    public static void main(String [] args){
        Payment payment = PayFactory.getInstance("AliPay");
        Payment payment2 = PayFactory.getInstance("WeChatPay");
        payment.pay(18);
        payment2.pay(19);
        
        
    }
}

策略模式本质就是将类型相同但实现细节不同的形式分开封装。 这样可以流程中不依赖于具体的实现,暂时使用抽象类或接口占据位置,等到具体运行时再确定采用何种处理方式。

以上仅是简单的示例,使用时要注意,不要使用 int\long\double\float 等数据类型来表示金融计算,要使用 BigDecimal 类型来进行专门的金融计算。