设计模式-行为型-策略模式

策略模式

概念

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

使用场景

挑选一种算法来作出某种选择。在有多种算法相似的情况下,避免使用 if…else 所带来的复杂和难以维护

实际应用

选择支付方式、出行方式

优缺点

优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。

代码实现

网购下单时选择某种支付方式

/**
 * 支付方式接口
 */
public interface Payment {

     void pay(Order order);
}
/**
 * 支付方式
 */
public class AliPay implements Payment{

    @Override
    public void pay(Order order) {
        System.out.println("开始支付宝支付..\n订单编号:"+order.getOrderId());
    }
}
public class WechatPay implements Payment{

    @Override
    public void pay(Order order) {
        System.out.println("开始微信支付..\n订单编号:"+order.getOrderId());
    }
}
public class UnionPay implements Payment{

    @Override
    public void pay(Order order) {
        System.out.println("开始银联支付..\n订单编号:"+order.getOrderId());
    }
}
/**
 * 订单
 */
@Data
@AllArgsConstructor
public class Order {
    private String orderId ;//订单编号
    private int money ;//单位分

}

/**
 * 支付枚举,避免了if/else
 */
public enum PayType {
    AliPay(new AliPay()),
    UnionPay(new UnionPay()),
    WechatPay(new WechatPay());

    private Payment payment;


    PayType(Payment payment) {
        this.payment = payment;
    }
    public void pay(Order order){
        payment.pay(order);
    }
}

测试类

public class Test {
    public static void main(String[] args) {

        // 下单
        Order order = new Order("202103030101",1000);
        // 选择支付方式付款
        // 此处一般由客户端传递字符串到服务端,服务端得到枚举对象,
        // 优点是解耦,省略了switch 和 if/else 判断
        PayType.AliPay.pay(order);
        // 控制台输出

//        开始支付宝支付..
//        订单编号:202103030101

    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值