盛世宏图 发表于 2024-12-10 16:13:18

23种设计模式之策略模式

1. 简介

策略模式(Strategy Pattern) 是一种行为设计模式。它界说了一系列算法,将每个算法都封装起来,而且使它们可以相互更换。策略模式让算法的变化独立于使用算法的客户。
比方,想象一个角色扮演游戏,游戏中的角色有不同的攻击方式,如近战攻击、长途攻击和魔法攻击。这些攻击方式可以看作是不同的策略,而角色可以根据环境(如敌人的位置、自身状态等)选择不同的攻击策略。
策略模式的布局


[*]策略(Strategy)接口
这是全部具体策略类都要实现的接口。它界说了一个通用的行为方法。
[*]具体策略(Concrete Strategy)类
这些类实现了策略接口,提供了具体的算法实现。
[*]上下文(Context)类
这个类持有一个策略对象的引用,并通过该引用调用策略对象的方法。
2. 代码

2.1 Strategy (策略接口)

public interface Strategy {
    public int operation(int a, int b);
}
2.2 AddStrategy (具体策略类)

public class AddStrategy implements Strategy{
    @Override
    public int operation(int a, int b) {
      return a + b;
    }
}
2.3 SubStrategy (具体策略类)

public class SubStrategy implementsStrategy{
    @Override
    public int operation(int a, int b)
    {
      return a-b;
    }
}
2.4 MultiplyStrategy (具体策略类)

public class MultiplyStrategy implements Strategy{

    @Override
    public int operation(int a, int b)
    {
      return a*b;
    }
}
2.5 Operation (上下文类)

public class Operation {
    private Strategy strategy;

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

    public int execute(int a, int b) {
      return strategy.operation(a, b);
    }
}
2.6 Test (测试)

public class Test {
    public static void main(String[] args) {
      Operation operation = new Operation(new AddStrategy());
      System.out.println("1 + 2 = " + operation.execute(1, 2));
      operation = new Operation(new SubStrategy());
      System.out.println("1 - 2 = " +operation.execute(1, 2));
      operation = new Operation(new MultiplyStrategy());
      System.out.println("1 * 2 = " +operation.execute(1, 2));
    }
}
2.7 运行结果

1 + 2 = 3
1 - 2 = -1
1 * 2 = 2
3. 优缺点



[*]策略模式的优点

[*]可扩展性好
当需要添加新的策略时,只需要创建一个新的具体策略类并实现策略接口即可。比方,在游戏中假如要添加一种新的 “召唤攻击策略”,只需要编写一个新的类实现 “AttackStrategy” 接口,而不需要修改角色类(上下文类)的主要逻辑。
[*]易于维护
由于每个策略都是独立的类,所以代码的职责明确。假如某个策略的算法出现问题,只需要在对应的策略类中进行修改,不会影响到其他策略。
[*]代码复用性高
不同的上下文对象可以复用相同的策略类。比如在游戏中有多个角色都可以使用长途攻击策略,这个策略类就可以被复用。

[*]策略模式的缺点

[*]增加了类的数量
每一个策略都需要一个单独的类来实现,这可能会导致项目中的类数量增多。在简单的场景下,假如策略不多,这种开销可能不明显,但在复杂的系统中,过多的类可能会使代码的组织布局变得复杂。
[*]客户端必须相识策略之间的区别
客户端(使用策略的代码)需要知道每个策略的具体行为,才能精确地选择和使用策略。在上面的游戏例子中,游戏开辟者需要清晰地知道近战攻击、长途攻击等策略的特点,才能公道地为角色配置策略。

4. 总结



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 23种设计模式之策略模式