> 文档中心 > 11-设计模式——策略模式

11-设计模式——策略模式


设计模式——策略模式

策略模式 ==> Strategy

模式定义:

定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者

策略模式可以让算法独立于使用它的客户端

Class Diagram

  • Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。
  • Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。

11-设计模式——策略模式

package com.example.designpatterns.strategy;import org.yaml.snakeyaml.DumperOptions;/** * @program: DesignPatterns * @description: 策略模式 * @author: Coder_Pan * @create: 2022-04-13 17:13 * * 设计一个鸭子,它可以动态地改变叫声 * 这里的算法族是鸭子的叫声行为 **/public class StrategyTest {    public static void main(String[] args) { System.out.println("策略模式......"); Duck duck = new Duck(); duck.setQuackBehavior(new Squeak()); duck.performQuack(); /**  * 能动态地改变 Context 所使用的算法  */ duck.setQuackBehavior(new Quack()); /**  * doSomething() 方法会调用 behavior()  */ duck.performQuack();    }}/** * 定义鸭子叫的接口 */interface QuackBehavior{    /**     * 鸭子叫声     */    void quack();}/** * 实现  ====>  Behavior */class Quack implements QuackBehavior {    @Override    public void quack() {      System.out.println("quack!");    }}/** * 实现  ====>  Behavior */class Squeak implements QuackBehavior{    @Override    public void quack() { System.out.println("squeak!");    }}/** * 定义一只鸭子 */class Duck {    private QuackBehavior quackBehavior;    /**     * doSomething() 方法会调用 behavior()     */    public void performQuack() { if (quackBehavior != null) {     quackBehavior.quack(); }    }    /**     * setStrategy(Strategy) 方法可以**动态**地改变 strategy 对象     * 能动态地改变 Context 所使用的算法     *      * @param quackBehavior     */    public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior;    }}

11-设计模式——策略模式 与50位技术专家面对面 11-设计模式——策略模式 20年技术见证,附赠技术全景图