设计模式系统回顾(2)策略模式

其设计目标在于,我要选择一种方式(策略)来达到我的目的

public interface IPayStrategy {
    boolean pay(int money);//支付
    BigDecimal queryBalance();//查询余额
}

public class AliPayStrategy implements IPayStrategy {
    @Override
    public boolean pay(int money) {
        System.out.println("支付宝支付成功");
        return true;
    }

    @Override
    public BigDecimal queryBalance() {
        System.out.println("支付宝余额20元");
        return new BigDecimal("20");
    }
}

public class WechatPayStrategy implements IPayStrategy {
    @Override
    public boolean pay(int money) {
        System.out.println("微信支付成功");
        return true;
    }

    @Override
    public BigDecimal queryBalance() {
        System.out.println("微信余额10元");
        return new BigDecimal(10);
    }
}

public enum PayEnum {
    AliPay("aliPay",new AliPayStrategy()),
    WechatPay("wechatPay",new WechatPayStrategy());

    private String key;
    private IPayStrategy value;

    PayEnum(String key, IPayStrategy value) {
        this.key = key;
        this.value = value;
    }

    public static IPayStrategy getValue(String key){
        for (PayEnum payEnum : PayEnum.values()){//遍历枚举类
            if (payEnum.key.equals(key)){
                return payEnum.value;
            }
        }
       return new AliPayStrategy();//没有合适key则默认支付宝支付
    }
}

public class TestPayStrategy2 {
    public static void main(String[] args) {
        IPayStrategy IPayStrategy = PayEnum.getValue("aliPay");
        IPayStrategy.pay(10);
        IPayStrategy.queryBalance();
    }
}

当一个模块需要选择的时候,并且选择任何一个对最终结果没有影响的时候,就需要策略模式,彼此策略之间可以独立又可以相互替换

优点
策略模式各个算法之间彼此独立,新增算法只需新增类就好了,符合开闭原则

可以简化代码中存在的大量 if 或者 switch 循环分支
缺点
当系统中存在很多策略的时候,会产生很多类,增加了系统的复杂性

使用者需要自行选择策略

ps:和工厂模式区别:
之前有不理解两个模式之间的区别,其实区别在于思想
1.用途不一样
工厂是创建型模式,它的作用就是创建对象;
策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为;
2.关注点不一样
一个关注对象创建
一个关注行为的封装
3.解决不同的问题
工厂模式是创建型的设计模式,它接受指令,创建出符合要求的实例;它主要解决的是资源的统一分发,将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。
策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间可以相互替换,策略模式让策略的变化独立于使用策略的客户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值