設計モード特別テーマ(四)戦略モード


ポリシーモードシーンの使用
  • コンパレータ
  • 旅行コース
  • 固定アルゴリズム
  • 買物決済
  • ポリシー・モードの実装
    まず、受注ステータスクラスを作成します.
    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));
    }