zoukankan      html  css  js  c++  java
  • java设计模式之---策略模式

        做好准备的人,一定会分到一颗糖

    1、策略模式有三种角色:

      上下文角色:OperationStrategy;

      抽象策略角色:Operation;

      具体策略角色:OperationAdd、OperationSub;

    2、具体代码实现:

      Operation类:

    public interface Operation {

    double getResult (double numA, double numB);

    }

      OperationAdd、OperationSub类:

    public class OperationAdd implements Operation {

    @Override
    public double getResult(double numA, double numB) {
    return numA + numB;
    }
    }
    public class OperationSub implements Operation {

    @Override
    public double getResult(double numA, double numB) {
    return numA - numB;
    }
    }

      OperationStrategy类:

    public class OperationStrategy {

    private Operation operation;

    public OperationStrategy (Operation operation) {
    this.operation = operation;
    }

    public double excuteOperation (double numA, double numB) {

    return operation.getResult(numA, numB);

    }
    }

      测试入口类:

    public class OperateTest {

    public static void main(String[] args) {
    OperationStrategy operation = new OperationStrategy(new OperationAdd());
    System.out.println(operation.excuteOperation(2, 3));

    OperationStrategy operation1 = new OperationStrategy(new OperationSub());
    System.out.println(operation1.excuteOperation(3, 2));

    }

    }

      测试结果:

      5.0
      1.0

    3、与工厂模式的不同:

      可以看出来,代码与简单工厂模式有很多相似的地方,两者之间最大的不同就是工厂类和上下文类;

      在使用的过程中,工厂模式是传入一个条件,然后返回相对应的对象,然后再根据对象去处理逻辑;策略模式,返回同一个对象,但是传参的时候,已经把相对应的对象传进去了;

      可以看出两者的关注点不一样,工厂就是创建对象的,其他的我不管;策略就是知道创建的哪一个对象,然后再逻辑处理。

      可能目前我的理解还不够深,也许以后设计模式的界限根本没有那么大,当自己能力足够的时候,可能自然而然设计出来的代码结构比模式还要好,或者是好几个设计模式一起使用,现在我只能继续学习,以后做的多了可能会更好的理解。

  • 相关阅读:
    idea语法检查红线隐藏配置
    spring security
    linux centos7下安装fastdfs
    定时任务在多个服务实例之间最多只执行一次
    C++11:01auto关键字
    chap3 数组 #C
    django之模型层 各种查询 数据库查询优化相关 事务使用
    django orm 中表与表之间建关系 视图层 路由层 django请求生命周期
    django 静态文件的配置 orm 中 字段与数据的增删改查 使用MySQL数据库
    BOM,DOM, JS,JQ
  • 原文地址:https://www.cnblogs.com/tengri-fighting/p/12665286.html
Copyright © 2011-2022 走看看