目录
前言
一、策略模式的简介
二、策略模式的概念
三、策略模式的作用
四、策略模式的优、缺点
策略模式的优点:
策略模式的缺点:
五、策略模式应用场景
六、代码案例
1)抽象接口类
2)具体的策略类:减
3)具体策略类:打折
4)上下文类
5)客户端Main代码测试
总结:
前言
在策略模式,我们通过定义一系列算法类,将每个算法封装到具有共同接口抽象类中,使得它们之间可以相互的替换;
一、策略模式的简介
策略模式(Strategy Mode)是一种行为型设计模式,它定义了算法家族,分别的封装起来,让它们之间可以相互替换;此模式让算法的变化,不会影响到使用算法的客户;这样做的好处是,当我们需要增加新的算法时,只需要添加一个新的算法类即可,而不需要修改原有的代码。
二、策略模式的概念
它定义了算法家族,分别封装起来,让它们之间可以相互替换。
三、策略模式的作用
策略模式的主要作用就是将算法的实现和客户端使用算法分离开来,使得算法变化而不影响客户端的代码;
策略模式的作用有以下几个方面:
- 通过定义一系列算法类并封装到具有共同接口的抽象类中,我们可以在不修改原有代码的情况下轻松地切换算法,从而满足不同的业务需求;
- 在没有使用策略模式的情况下,往往需要使用大量的条件语句来实现不同的业务逻辑,这样会使得代码变得复杂难以维护。而使用策略模式可以将不同的业务逻辑封装到不同的算法类中,从而避免了大量的条件语句;
- 由于每个算法类都是独立的,因此可以在其他项目中重用这些算法类,从而提高代码的复用性;
- 策略模式将算法的实现与使用算法的客户端代码分离开来,从而降低了它们之间的耦合度;
四、策略模式的优、缺点
策略模式的优点:
- 可以方便地切换算法
- 可以避免大量的条件语句
- 可以提高代码的复用性
- 可以降低耦合度
策略模式的缺点:
- 策略模式的类过多:每次具体策略都要对应一个策略类,也就造成了类的数量增加,从而导致“类爆炸”;
- 客户端必须了解所有的策略类:客户端使用策略类时,必须知道这个策略类的作用;
- 策略模式的对象数量过多:每个策略类都是一个对象,当系统中存在大量的策略类时,会增加对象的数量,从而占用更多的内存空间;
五、策略模式应用场景
策略模式应用场景包括以下几个
- 多选一的时候
- 游戏角色:魔法师、大剑士、武士等等
- 算法:加减乘除什么的
- 还有一些就不一一写出来了
六、代码案例
注意:这里以商场打折、满减等为案例
1)抽象接口类
// 抽象策略类
public interface DiscountStrategy {
double calculateDiscount(double price);
}
2)具体的策略类:减
// 具体策略类:满减
public class FullReduction implements DiscountStrategy {
public double calculateDiscount(double price) {
if (price >= 100) {
return price - 20;
}
return price;
}
}
3)具体策略类:打折
// 具体策略类:打折
public class Discount implements DiscountStrategy {
public double calculateDiscount(double price) {
return price * 0.8;
}
}
4)上下文类
// 上下文类
public class Context {
private DiscountStrategy discountStrategy;
public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculatePrice(double price) {
return discountStrategy.calculateDiscount(price);
}
}
5)客户端Main代码测试
// 客户端代码
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context();
// 使用满减策略
context.setDiscountStrategy(new FullReduction());
System.out.println("使用满减策略,总价为:" + context.calculatePrice(120));
// 使用打折策略
context.setDiscountStrategy(new Discount());
System.out.println("使用打折策略,总价为:" + context.calculatePrice(120));
}
}
测试结果:
使用满减策略,总价为:100.0
使用打折策略,总价为:96.0文章来源:https://www.toymoban.com/news/detail-474264.html
总结:
策略模式是一种非常灵活和可扩展的设计模式,可以帮助我们更好地应对需求变化和提高代码质量文章来源地址https://www.toymoban.com/news/detail-474264.html
到了这里,关于Java设计模式—策略模式(Strategy Mode)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!