JAVA23种设计模式之策略模式

  1. 策略模式:
    定义一系列的算法,并且将每个算法封装起来。让他们可以相互替换。策略模式是对于算法的包装,把算法本身与算法的使用分隔开,使用不同的对象管理。
  2. 策略模式示意图:

在这里插入图片描述
来源于《菜鸟教程

策略模式设计到的角色有:

  • 策略角色:即图上的Strategy。对于开发人员来说,即为抽象类或者接口,主要目的是提供给到具体策略实现类做继承或者实现。
  • 具体策略:即为图上的OperationAdd,OperationSubstract,OperationMultiply.主要目的是实现不同的算法或者说是行为。
  • 环境角色:即图上的Context;上下文环境,持有 Stragegy 的引用。
    3.实例:
    场景:某航空公司,需要根据用户的会员等级分别给予不同的票价折扣。
    价格计算接口:
public interface Price { 
        double calPrice(double price);
}

价格计算实现算法:

  • 非会员不打折
public class NoMember implements Price{  
    @Override   
    public double calPrice(double price) { 
        return price;    
    }
}
  • 初级会员打九折
public class PrimaryMember implements Price {
    @Override
    public double calPrice(double price) {
        return price*0.9;
    }
}
  • 中级会员打八折
public class MiddleMember implements Price {
    @Override
    public double calPrice(double price) {
        return price*0.8;
    }
}
  • 高级会员打五折
public class HighMember implements Price {
    @Override
    public double calPrice(double price) {
        return price*0.5;
    }
}

价格类(Context 类):

public class Member {
    private Price price;

    public Member(Price price) {
        this.price = price;
    }

    public double caculate(float oldPrice){
        return price.calPrice(oldPrice);
    }
}

测试函数:

public class Main {

    public static void main(String[] args) {
        //高级会员
        Member member = new Member(new HighMember());
        System.out.println("高级会员:"+member.caculate(100));
        //非会员
        member=new Member(new NoMember());
        System.out.println("非会员:"+member.caculate(100));
    }
}

通过以上实例,可以总结策略模式的优缺点如下:

  • 优点:
  1. 结构清晰,把策略分离成一个个单独的类「替换了传统的 if else」
  2. 代码耦合度降低。提高了代码的扩展性。
  • 缺点:
  1. 随着系统的复杂度增加,会有非常多的策略类,并且客户端需要知道每个策略类的具体内容。不然无法知道该使用哪个策略类。
    总结:
    通过策略模式的学习,我们可以知道,策略模式可以降低系统的耦合度,提高系统的可扩展性。策略模式是类似设置一个调度中心,通过这个调度中心去调度不同的算法来实现我们的功能,这样可以省略在代码中写很多的if…else的语句。

项目实例代码Git地址:
https://gitee.com/CoderJu/DesignPattern.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值