• 策略模式Strategy


    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11400764.html

    1. 定义

    定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

    2.结构图

    • Strategy:策略接口,用来约束一系列具体的策略算法。Context使用这个接口来调用具体的策略实现定义的算法。
    • ConcreteStrategy:具体的策略实现,也就是具体的算法实现。
    • Context:上下文,负责和具体的策略类交互。通常上下文会持有一个真正的策略实现,上下文还可以让具体的策略类来获取上下文的数据,甚至让具体的策略类来回调上下文的方法。

    3. 本质

    策略模式的本质:分离算法,选择实现。

    4.Code Demo

    Strategy.java

    1 package org.fool.dp.strategy;
    2 
    3 public interface Strategy {
    4     int calculate(int a, int b);
    5 }

    AddStrategy.java

    1 package org.fool.dp.strategy;
    2 
    3 public class AddStrategy implements Strategy {
    4     @Override
    5     public int calculate(int a, int b) {
    6         return a + b;
    7     }
    8 }

    SubtractStrategy.java

    1 package org.fool.dp.strategy;
    2 
    3 public class SubtractStrategy implements Strategy {
    4     @Override
    5     public int calculate(int a, int b) {
    6         return a - b;
    7     }
    8 }

    MultiplyStrategy.java

    1 package org.fool.dp.strategy;
    2 
    3 public class MultiplyStrategy implements Strategy {
    4     @Override
    5     public int calculate(int a, int b) {
    6         return a * b;
    7     }
    8 }

    DivideStrategy.java

    1 package org.fool.dp.strategy;
    2 
    3 public class DivideStrategy implements Strategy {
    4     @Override
    5     public int calculate(int a, int b) {
    6         return a / b;
    7     }
    8 }

    Context.java

     1 package org.fool.dp.strategy;
     2 
     3 public class Context {
     4     private Strategy strategy;
     5 
     6     public Context(Strategy strategy) {
     7         this.strategy = strategy;
     8     }
     9 
    10     public int calculate(int a, int b) {
    11         return strategy.calculate(a, b);
    12     }
    13 }

    Client.java

     1 package org.fool.dp.strategy;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         Strategy addStrategy = new AddStrategy();
     6         Context context = new Context(addStrategy);
     7         System.out.println(context.calculate(1, 2));
     8 
     9         Strategy subtractStrategy = new SubtractStrategy();
    10         context = new Context(subtractStrategy);
    11         System.out.println(context.calculate(1, 2));
    12 
    13         Strategy multiplyStrategy = new MultiplyStrategy();
    14         context = new Context(multiplyStrategy);
    15         System.out.println(context.calculate(1, 2));
    16 
    17         Strategy devideStrategy = new DivideStrategy();
    18         context = new Context(devideStrategy);
    19         System.out.println(context.calculate(1, 2));
    20     }
    21 }
  • 相关阅读:
    PLSQL WEBSERVICES 发布
    WebService开发指南
    来自10位成功IT人士的23条经验教训
    图片格式区别:png8,png24,jpg,jpeg,gif,webp
    当你在工作中失去动力时该怎么办?
    面向对象的反思
    关于前端面试的一些心得
    有什么好的交友软件吗?求推荐
    区块链开发的11种顶级编程语言
    CSRF的几种防御方法的利弊分析
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11400764.html
Copyright © 2020-2023  润新知