設計モード特別テーマ(四)戦略モード
3023 ワード
ポリシーモードシーンの使用コンパレータ 旅行コース 固定アルゴリズム 買物決済 ポリシー・モードの実装
まず、受注ステータスクラスを作成します.
次に、受注クラスを作成します.
支払タイプの列挙:
支払チャネルインタフェース:
いくつかの異なる支払い方法があります.
もう一つ:
そして、
もう一つ:
はい、テストします.
まず、受注ステータスクラスを作成します.
public class PayState {
private int code;
private Object data;
private String msg;
public PayState(int code, String msg,Object data) {
this.code = code;
this.data = data;
this.msg = msg;
}
@Override
public String toString(){
return (" :[" + code + "]," + msg + ", :" + data);
}
}
次に、受注クラスを作成します.
public class Order {
private String uid;
private String orderId;
private double amount;
public Order(String uid,String orderId,double amount){
this.uid = uid;
this.orderId = orderId;
this.amount = amount;
}
// , Payment
// ?
// switch , switch
// if else if
public PayState pay(PayType payType){
return payType.get().pay(this.uid,this.amount);
}
}
支払タイプの列挙:
public enum PayType {
ALI_PAY(new AliPay()),
WECHAT_PAY(new WechatPay()),
UNION_PAY(new UnionPay()),
JD_PAY(new JDPay());
private Payment payment;
PayType(Payment payment){
this.payment = payment;
}
public Payment get(){return this.payment;}
}
支払チャネルインタフェース:
public interface Payment {
public PayState pay(String uid, double amount);
}
いくつかの異なる支払い方法があります.
public class WechatPay implements Payment {
public PayState pay(String uid, double amount) {
System.out.println(" ");
System.out.println(" ");
return new PayState(200," ",amount);
}
}
もう一つ:
public class AliPay implements Payment {
public PayState pay(String uid, double amount) {
System.out.println(" ");
System.out.println(" , ");
return new PayState(200," ",amount);
}
}
そして、
public class JDPay implements Payment {
public PayState pay(String uid, double amount) {
System.out.println(" ");
System.out.println(" , ");
return new PayState(200," ",amount);
}
}
もう一つ:
public class UnionPay implements Payment {
public PayState pay(String uid, double amount) {
System.out.println(" ");
System.out.println(" , ");
return new PayState(200," ",amount);
}
}
はい、テストします.
public static void main(String[] args) {
// ,
//
Order order = new Order("1","20180311001000009",324.45);
// , 、 、 、 、
//
//
//
System.out.println(order.pay(PayType.WECHAT_PAY));
}