Java策略模式详解(角色实例及应用场景)

Java策略模式详解(角色实例及应用场景)-mikechen

Java策略模式是常用的Java设计模式,下面我重点详解Java策略模式的角色实现与应用场景@mikechen

Java策略模式定义

Java策略模式是一种行为型设计模式,它定义了算法族(一组算法)并封装起来,使它们之间可以相互替换,让算法的变化独立于使用算法的客户。

 

Java策略模式角色

Java策略模式中,通常会涉及到以下角色:

Java策略模式详解(角色实例及应用场景)-mikechen

  1. 抽象策略(Strategy)接口或抽象类:定义了算法族的公共接口,包含了算法的抽象方法。
  2. 具体策略(Concrete Strategy)类:实现了抽象策略接口或继承了抽象策略类,封装了具体的算法。
  3. 上下文(Context)类:维护了一个策略接口或抽象类的引用,用于存储当前使用的策略对象,并提供了一个方法来执行算法。

 

Java策略模式实例

以下是策略模式的实现步骤:

1.创建一个策略接口(或抽象类),定义一个公共方法用于执行算法。

public interface Strategy {
    public void execute();
}

 

2.创建具体策略类,实现策略接口(或继承抽象类),并实现算法。

public class ConcreteStrategyA implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略A");
    }
}

public class ConcreteStrategyB implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略B");
    }
}

public class ConcreteStrategyC implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略C");
    }
}

 

3.创建一个包含策略接口引用的上下文类,用于设置和执行算法。

public class Context {
    private Strategy strategy;
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public void executeStrategy() {
        strategy.execute();
    }
}

 

4.在客户端中创建具体策略类的实例,并将其传递给上下文对象,然后通过上下文对象来执行算法。

public class Client {
    public static void main(String[] args) {
        Context context = new Context(new ConcreteStrategyA());
        context.executeStrategy();
        
        context.setStrategy(new ConcreteStrategyB());
        context.executeStrategy();
        
        context.setStrategy(new ConcreteStrategyC());
        context.executeStrategy();
    }
}

输出结果:

执行策略A
执行策略B
执行策略C

 

Java策略模式应用场景

Java策略模式应用场景如下:

1.当需要在运行时动态地选择算法时,可以使用策略模式

例如:当一个系统需要根据不同的用户输入来执行不同的操作时,就可以使用策略模式。

2.当有多个相关的类仅在算法或行为上有区别时,可以使用策略模式

例如:在一个电商平台中,不同的促销活动,例如:满减、打折、送礼品等,虽然具有不同的算法,但是它们都属于促销活动,可以使用策略模式来封装这些算法。

3.当一个类有多个行为或算法,但是不能都实现时,可以使用策略模式

例如:在一个图像处理应用程序中,可以使用不同的算法来实现图像压缩、图像滤镜等功能,但是这些算法不能全部实现在一个类中。

4.当需要避免使用多重条件语句时,可以使用策略模式

例如:当一个系统需要根据不同的条件来执行不同的操作时,如果使用多重条件语句会导致代码臃肿、可读性差等问题,此时可以使用策略模式来优化代码。

以上就是Java策略模式详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法