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

    策略模式strategy

    场景:对不同客户的不同报价策略

    如果采用if else不易扩展,不符合开闭原则,可以采用策略模式

    策略模式:

    对应于解决某一个问题的算法族,允许其中一个算法去解决某一问题,同时可以方便的更改和扩展算法,可以由客户端决定调用那个算法

    结构:抽象策略类,具体策略类(算法族),上下文类(客户端和算法类的分离),客户端类

    本质:分离算法,选择实现

    开发中常见的场景

    -javase中的GUI编程,布局管理

    -Spring框架中,Resource接口,资源访问策略

    -javax.servlet.http.HrrpServlet#service()

    /**
     * 策略模式
     * 通过对同一接口的不同实现,形成算法族
     * @author 小帆敲代码
     *
     */
    public interface Strategy {
      double getPrice(double standardPrice);
    }
    class NewCustomerFewStrategy implements Strategy{
     @Override
     public double getPrice(double standardPrice) {
      System.out.println("不打折,原价");
      return standardPrice;
     }
    }
    class NewCustomerManyStrategy implements Strategy{
     @Override
     public double getPrice(double standardPrice) {
      System.out.println("打九折");
      return standardPrice*0.9;
     }
    }
    class OldCustomerFewStrategy implements Strategy{
     @Override
     public double getPrice(double standardPrice) {
      System.out.println("打八五折");
      return standardPrice*0.85;
     }
    }
    class OldCustomerManyStrategy implements Strategy{
     @Override
     public double getPrice(double standardPrice) {
      System.out.println("打八折");
      return standardPrice*0.8;
     }
    }

    /**
     * 上下文类
     * 确保算法和客户端的分离
     * @author 小帆敲代码
     *
     */
    public class Context {
      private Strategy strategy;//与算法进行交互
      //通过构造器设置算法
      public Context(Strategy strategy) {
       super();
       this.strategy = strategy;
      }
      //通过set方法
      public void setStrategy(Strategy strategy) {
       this.strategy = strategy;
      }
      public void getPrice(double s) {
       System.out.println("您的报价是"+strategy.getPrice(s));
      }
      
    }

    public class Client {
    public static void main(String[] args) {
     Context c=new Context(new OldCustomerManyStrategy());
     c.getPrice(100);
    }
    }

  • 相关阅读:
    GRIDVIEW导出到EXCEL
    数据表示:字节 高位低位
    js学习笔记0
    12奇招,循序删除顽固的文件
    加快开关机速度
    PHP正则表达式的快速学习
    firefox下height不能自动撑开的解决办法
    给MySQL加密(也适用于Wamp5中)
    我的电脑创建资源管理器
    css 圆角7种CSS圆角框解决方案
  • 原文地址:https://www.cnblogs.com/code-fun/p/11363293.html
Copyright © 2011-2022 走看看