设计模式之策略模式和状态模式

我不是女神ヾ 2021-09-23 13:18 488阅读 0赞

1 策略模式

我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法,

我们可以简单理解为更加不同的策略对象,执行不同策略方法。

2 类图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9jaGVueXUuYmxvZy5jc2RuLm5ldA_size_16_color_FFFFFF_t_70

3 代码实现

1)接口:Strategy.java

  1. public interface Strategy {
  2. public int doOperation(int num1, int num2);
  3. }

2)实现类:OperationAdd.java

  1. public class OperationAdd implements Strategy{
  2. @Override
  3. public int doOperation(int num1, int num2) {
  4. return num1 + num2;
  5. }
  6. }

3)实现类:OperationSubstract.java

  1. public class OperationSubstract implements Strategy{
  2. @Override
  3. public int doOperation(int num1, int num2) {
  4. return num1 - num2;
  5. }
  6. }

4)实现类:OperationMultiply.java

  1. public class OperationMultiply implements Strategy{
  2. @Override
  3. public int doOperation(int num1, int num2) {
  4. return num1 * num2;
  5. }
  6. }

5)创建Context.java

  1. public class Context {
  2. private Strategy strategy;
  3. public Context(Strategy strategy){
  4. this.strategy = strategy;
  5. }
  6. public int executeStrategy(int num1, int num2){
  7. return strategy.doOperation(num1, num2);
  8. }
  9. }

StrategyPatternDemo 里面的main函数

  1. public class StrategyPatternDemo {
  2. public static void main(String[] args) {
  3. Context context = new Context(new OperationAdd());
  4. System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
  5. context = new Context(new OperationSubstract());
  6. System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
  7. context = new Context(new OperationMultiply());
  8. System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
  9. }
  10. }

#

4 运行结果

  1. 10 + 5 = 15
  2. 10 - 5 = 5
  3. 10 * 5 = 50

5 对比状态模式

我们上面策略模式里面的Demo里面每次都是通过传递新的策略对象来构建Context对象,那我们的状态模式可以理解为我们在Context类里面有单独设置策略对象的函数,不需要每次进行构建Context,状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context本身的决策来改变组合的 Strategy 对象

6 代码实现

我们把上面的Context里面的构造方法里面不要单独进行传递策略对象,我们单独增加一个SetStrategy这样的函数来设置策略改变当前类的策略对象具体的属性值。

Context.java

  1. public class Context {
  2. private Strategy strategy;
  3. public Context(){
  4. }
  5. public SetStrategy(Strategy strategy){
  6. this.strategy = strategy;
  7. }
  8. public int executeStrategy(int num1, int num2){
  9. return strategy.doOperation(num1, num2);
  10. }
  11. }
  12. public static void main(String[] args) {
  13. Context context = new Context();
  14. context.SetStrategy(new OperationAdd());
  15. System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
  16. context.SetStrategy(new OperationSubstract());
  17. System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
  18. context.SetStrategy(new OperationMultiply());
  19. System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
  20. }

部分内容参考链接:https://www.runoob.com/design-pattern/state-pattern.html

发表评论

表情:
评论列表 (有 0 条评论,488人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式状态模式

    什么是设计模式 设计模式是经常使用、大多数人知道,有特定目录的代码设计经验。设计模式可以提高代码可维护性,可提升代码运行效率,也能提高系统可靠性。设计模式可以分为三类,分别

    相关 设计模式状态模式

    一.什么是状态模式? 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了这个类. 二.什么时候使用状态模式? 状态模式主要解决的是当控制

    相关 设计模式状态模式

    在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。 状态模式:对有

    相关 设计模式状态模式

    状态模式定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。 优点: 1、结构清晰,避免使用过多的switch……case或者if……else语句,避

    相关 设计模式状态模式

    定义:又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看

    相关 设计模式状态模式

    . 模式定义 ​ 在很多情况下,一个对象的行为取决于它的一个或多个变化的属性,这些属性我们称之为状态,这个对象称之为状态对象。对于状态对象而已,它的行为依赖于它的状态,