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

    背景:

    商场促销期间,可能会出现8折、5折的促销活动,也可能出现满100减10、满200减30的促销活动,设计一个收银系统。

    策略模式:定义了算法家族,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。

    UML类图:

    Demo:

    算法接口Strategy:

    1 public interface Strategy {
    2 
    3     void algorithmInterface();
    4 }

    具体算法ConcreteStrategyA:

    1 public class ConcreteStrategyA implements Strategy {
    2     @Override
    3     public void algorithmInterface() {
    4         System.out.println("算法A实现");
    5     }
    6 }

    具体算法ConcreteStrategyB:

    1 public class ConcreteStrategyB implements  Strategy {
    2     @Override
    3     public void algorithmInterface() {
    4         System.out.println("算法B实现");
    5     }
    6 }

    Context上下文类:

     1 public class Context {
     2 
     3     private Strategy stagtegy;
     4 
     5     public Context(String algorithm) {
     6         switch (algorithm){
     7             case "A":stagtegy = new ConcreteStrategyA();break;
     8             case "B":stagtegy = new ConcreteStrategyB();break;
     9             default:break;
    10         }
    11     }
    12 
    13     public void contextInterface(){
    14         stagtegy.algorithmInterface();
    15     }
    16 }

    测试类:

    1 public class Main {
    2 
    3     public static void main(String[] args) {
    4         Context context = new Context("A");
    5         context.contextInterface();
    6     }
    7 }

    总结:

    策略模式在平时开发中比较常用,使用场景是:一个接口或抽象类有一组具体的实现,使用时使用接口或抽象类中的抽象方法,这样可根据传入的不同实例实现不同的策略。比如可以将上述的Strategy当成参数传递给一个方法。

  • 相关阅读:
    JavaScript
    CSS
    HTML
    python面试题解析(前端、框架和其他)
    python面试题解析(数据库和缓存)
    python面试题解析(网络编程与并发)
    python面试题解析(python基础篇80题)
    python面试题
    P103 单源最短路问题 第三种Dijkstra算法
    P103 Dijkstra算法 单源最短路问题优化算法
  • 原文地址:https://www.cnblogs.com/xiaosiyuan/p/8999549.html
Copyright © 2011-2022 走看看