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

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

    用途:应对时常变化的算法

    案例:车辆过磅系统

    概述:将地磅通过串口连接到电脑,读取串口信息,其中可能变化的部分是:不同的地磅读取的数据格式往往不是不一样的(此例中以火车过磅和汽车过磅说明),为了读取真正的数据,必须定义一个分析字符串的算法,这个算法会因为不同的地磅而不同

    用策略模式解决问题:将可能变化的多种分析字符串的算法分装起来,提供给客户端代码一个统一的接口。使得替换算法时不会影响到客户端的代码(不需修改)

    类图:

    • 定义一个接口:IGetPortData,接口中定义一方法:int Getdata(string originalString),此方法用来分析读串口得到字符串
    • 汽车过磅类GetTruckScaleData和火车过磅类GetTrainScaleData继承上述接口并分别实现了方法Getdata(string origianlString)。客户代码类中包含一个IGetPortData的引用,可以动态的指向GetTruckScaleData或GetTrainSclaeData而无需修改代码

    代码实例:(为了简单而写在了一个了文件里了。:-))

    Code

    总结:只要修改配置文件(实例里没有具体设置。。。:-)),通过反射得到想要的算法。如果要增加一种新的地磅,只需一定一个实现了IGetWeightData的类,写好GetData()方法。修改配置文件(配置文件中保存类名)即可,无需修改客户端代码。

  • 相关阅读:
    如何用redis/memcache做Mysql缓存层?
    孤儿进程和僵尸进程总结
    二叉树的遍历(非递归)
    Linux进程分配内存的两种方式--brk() 和mmap()
    Hbase
    cgroup 分析之CPU和内存部分
    十道海量数据处理面试题与十个方法大总结
    快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,即USE方法
    红黑树
    tcp 两个重要窗口:滑动窗口 和 拥塞窗口
  • 原文地址:https://www.cnblogs.com/zzy0471/p/1364822.html
Copyright © 2011-2022 走看看