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当成参数传递给一个方法。

  • 相关阅读:
    关于cocos2dx之lua使用TableView
    设计模式-----工厂模式
    android YUV Sensor配置Camera应用的flash auto菜单
    AngularJS实现cookie跨域
    julia/pyplot 绘图加入标签和标题
    自己写unicode转换ascii码,wchar*到char*
    Android笔记——Activity中的数据传递案例(用户注冊)
    IIS预编译提升载入速度
    Python Tkinter 基础控件学习
    spfile
  • 原文地址:https://www.cnblogs.com/xiaosiyuan/p/8999549.html
Copyright © 2011-2022 走看看