首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【玩转23种Java设计模式】行为型模式篇:策略模式

【玩转23种Java设计模式】行为型模式篇:策略模式

作者头像
程序员云帆哥
发布2022-05-12 10:51:23
发布2022-05-12 10:51:23
3430
举报
文章被收录于专栏:程序员云帆哥程序员云帆哥

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理

文章目录

一、简介

  策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。   策略模式,定义了一组算法(业务规则),封装了每个算法,这族的算法可互换代替(interchangeable)。

  它的组成:

  • 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
  • 具体策略角色:包装了相关的算法和行为。
  • 环境角色:持有一个策略类的引用,最终给客户端调用。

二、实例

1、策略接口类(Strategy)

代码语言:javascript
复制
public interface Strategy {
    void travelStrategy();
}

2、飞机策略实现类(AirplaneStrategy)

代码语言:javascript
复制
public class AirplaneStrategy implements Strategy {
    @Override
    public void travelStrategy() {
        System.out.println("乘坐飞机出游");
    }
}

3、火车策略实现类(TrainStrategy)

代码语言:javascript
复制
public class TrainStrategy implements Strategy {
    @Override
    public void travelStrategy() {
        System.out.println("乘坐火车出游");
    }
}

4、环境类(Context)

策略对象改变 context 对象的执行算法。

代码语言:javascript
复制
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void travel() {
        strategy.travelStrategy();
    }
}

5、测试类

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Context context = new Context(new AirplaneStrategy());
        context.travel();
    }
}

控制台输出:

代码语言:javascript
复制
乘坐飞机出游

三、总结

1、优点

  • 算法可以自由切换。
  • 避免使用多重条件判断,解决了所谓的if-else问题。
  • 扩展性良好。

2、缺点

  • 策略类会增多。
  • 所有策略类都需要对外暴露。

3、应用场景

  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
  • 一个系统需要动态地在几种算法中选择一种。
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 文章目录
  • 一、简介
  • 二、实例
    • 1、策略接口类(Strategy)
    • 2、飞机策略实现类(AirplaneStrategy)
    • 3、火车策略实现类(TrainStrategy)
    • 4、环境类(Context)
    • 5、测试类
  • 三、总结
    • 1、优点
    • 2、缺点
    • 3、应用场景
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档