先上代码
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 类型来进行专门的金融计算。