设计模式-行为型-策略模式

策略模式是一种行为设计模式,允许在运行时选择算法或策略。通过抽象策略类和具体策略实现,客户端可以在不修改代码的情况下切换行为。例如,从北京到上海,可以灵活选择坐火车或火箭作为出行策略。该模式提高了代码的可扩展性和灵活性,减少了条件语句的使用。在Java的Comparator接口中,compare()方法就是一个策略模式的应用实例。
摘要由CSDN通过智能技术生成

描述

  • 实现最终目的,有很多种算法方法。为了实现切换算法而不影响使用算法的客户端,引入的策略模式
  • 比如:从北京到上海有很多种实现方式。抽象化去的方法,具体是坐飞机去,还是坐地铁去,不影响我最终可以到达的这个目的。

角色

  • 抽象策略类:定义策略类的功能,使用规则。可以是接口,也可以是抽象类。
  • 具体策略类:实现抽象策略类的具体类。
  • 环境类:使用策略类的客户端。

实现

public class Test {
    public static void main(String[] args) {
        Beijing beijing = new Beijing(new MotorCarStrategy());
        beijing.goTO();
        // 不够快,换一种策略
        beijing.setStrategy(new RocketStrategy());
        beijing.goTO();
    }
}

// 策略 抽象策略类
interface Strategy{
    // 行动方式
   String act();
}

// 具体实现类
class MotorCarStrategy implements Strategy {

    @Override
    public String act() {
        return "坐火车";
    }
}

// 具体实现类
class RocketStrategy implements Strategy {
    @Override
    public String act() {
        return "坐火箭";
    }
}

// 客户端使用 环境类
class Beijing {

    private Strategy strategy;

    Beijing(Strategy strategy) {
        this.strategy = strategy;
    }

    public void goTO() {
        System.out.println("去北京要:" + strategy.act());
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
}

优点

  • 可以自由切换具体策略类。
  • 易扩展,增加一个策略类,不用更改客户端代码。
  • 面向对象的设计思想,避免多次使用 if else。

缺点

  • 客户端要自行决定策略,要了解这个策略。
  • 策略模式容易产生多个策略类。

使用场景

  • 需要动态的来回切换算法实现时,可以使用策略模式。
  • 一个类有多种行为,且每个行为都多次条件判断语句的形式出现,可以使用策略模式,把多种行为提取到各自的策略类中。
  • 不需要为客户提供具体实现细节时,可以提取抽象策略类,隐藏具体细节。

JDK源码中的实现

  • Comparator接口 compare()方法
    抽象策略类:
    抽象策略类
    具体策略类(子类):
    具体策略类
    客户端使用(环境类):
    客户端环境类
    客户端环境类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值