策略模式

201 阅读1分钟

一、创建一个接口

package strategy.pay;

public interface Payment {

    PayStatus pay(String uid, double amount);

}

二、实现接口

package strategy.pay.channel;

import strategy.pay.PayStatus;
import strategy.pay.Payment;

public class ALIPay implements Payment {
    @Override
    public PayStatus pay(String uid, double amount) {
        return new PayStatus("200", "ALIPay成功", null);
    }
}
package strategy.pay.channel;

import strategy.pay.PayStatus;
import strategy.pay.Payment;

public class JDPay implements Payment {
    @Override
    public PayStatus pay(String uid, double amount) {
        return new PayStatus("200", "JDPay成功", null);
    }
}
package strategy.pay.channel;

import strategy.pay.PayStatus;
import strategy.pay.Payment;

public class WeChatPay implements Payment {
    @Override
    public PayStatus pay(String uid, double amount) {
        return new PayStatus("200", "WeChatPay成功", null);
    }
}

三、测试

package strategy.pay;

import strategy.pay.channel.ALIPay;
import strategy.pay.channel.JDPay;
import strategy.pay.channel.WeChatPay;

import java.util.UUID;

public class PayTest {
    public static void main(String[] args) {
        ALIPay aliPay = new ALIPay();
        System.out.println(aliPay.pay(UUID.randomUUID().toString(), 13.14));
        JDPay jdPay = new JDPay();
        System.out.println(jdPay.pay(UUID.randomUUID().toString(), 13.14));
        WeChatPay weChatPay = new WeChatPay();
        System.out.println(weChatPay.pay(UUID.randomUUID().toString(), 13.14));
    }
}

四、优化代码

(1)枚举所有的实现类

package strategy.pay;

import strategy.pay.channel.ALIPay;
import strategy.pay.channel.JDPay;
import strategy.pay.channel.WeChatPay;

public enum PayType {
    ALI_PAY(new ALIPay()),
    JD_PAY(new JDPay()),
    WECHAT_PAY(new WeChatPay());

    private Payment payment;
    PayType(Payment payment) {
        this.payment = payment;
    }

    public Payment get() {
        return this.payment;
    }
}

(2)测试

package strategy.pay;

import java.util.UUID;

public class PayTest {
    public static void main(String[] args) {
        System.out.println(PayType.ALI_PAY.get().pay(UUID.randomUUID().toString(), 13.14));
        System.out.println(PayType.JD_PAY.get().pay(UUID.randomUUID().toString(), 13.14));
        System.out.println(PayType.WECHAT_PAY.get().pay(UUID.randomUUID().toString(), 13.14));

    }
}