STRATEGY 模式

STRATEGY 模式

一.定义

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

二.类图

image.png

三.实现

package cn.zzf.strategy;

/**
 * @author GaoFeng2017
 * @date 2018-06-04 21:50:43
 **/

public class ArrayHandler implements Handler {

    @Override
    public void handle(String content) {
        System.out.println(content + ",已被转换为数组对象");
    }
}
package cn.zzf.strategy;

import java.io.Closeable;

/**
 * @author GaoFeng2017
 * @date 2018-06-04 21:07:44
 **/

public class ExcelReader {

    public ExcelReader() {
        init();
    }

    private void init() {
        System.out.println("excel读取器初始化中");
    }

    public void read(Handler handler,int index) {
        handler.handle("读取到第" + index + "行的Excel文本");
    }

    public void close() {
        System.out.println("释放资源");
    }
}

package cn.zzf.strategy;

/**
 * @author GaoFeng2017
 * @date 2018-06-04 21:16:55
 **/

interface Handler {
   void handle(String content);
}

package cn.zzf.strategy;

/**
 * @author GaoFeng2017
 * @date 2018-06-04 21:51:40
 **/

public class MapHandler implements Handler {
    @Override
    public void handle(String content) {
        System.out.println(content + ",已被转为map对象");
    }
}

package cn.zzf.strategy;

/**
 * @author GaoFeng2017
 * @date 2018-06-04 21:55:33
 **/

public class Test {
    public static void main(String[] args) {
        ExcelReader reader = new ExcelReader();
        reader.read(new ArrayHandler(),1);
        reader.read(new MapHandler(),2);
        reader.close();
    }
}

运行结果

excel读取器初始化中
读取到第1行的Excel文本,已被转换为数组对象
读取到第2行的Excel文本,已被转为map对象
释放资源

分析

整个实现很简单,ExcelReader类模拟读取excel文件,并通过handler策略类来解析读取到的excel文本。在ExcelReader的read方法中,需要一个具体的算法来处理读取后的excel文本,我们可能把这些文本解析成bean,也可能解析成数组,还可能解析成map对象,而ArrayHandler和MapHandler正是解析策略的实现,最重要的是,策略对象以参数的形式传递使用,耦合度是非常低的。

四.总结

策略模式运用了面向对象的多态性,把具体算法委托给接口,通过组合的方式来实现解耦,完全遵循了DIP原则。在该模式中,每个具体的策略实现都可以当做参数来使用,这对于同一个问题来说,可以有不同的算法具体实现。另外,我们写框架时,有些逻辑是不确定的,它们有很多种情况,这个时候可以对外暴露一个接口,让框架使用者针对这个接口实现具体逻辑,再交给框架调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 再次来到旧金山,顺道又去趟唐人街。旧金山唐人街(又称华埠)于1840年成立。迄今为止是北美洲最古老的唐人街,也是旧...
    纽约桃花阅读 6,934评论 2 2
  • 又是一个傍晚时分,倚坐在窗前,思绪缓缓而来。转眼回家五天了,除了感觉家里比学校冷以外,其他的丝毫没有感觉...
    语小鱼阅读 1,365评论 0 1
  • 千里有缘一线牵!长臂猿与“大粪”形成的缘份说的就是我俩!我经常这样形容我们两个。 常常有人问我嫁到哪里去了,夫君是...
    花落花开_1168阅读 3,273评论 2 2
  • 我们喜欢把自己比喻成小狮子🦁️,其实我和我们班的孩子都更像是丑小鸭,我刚入职,教学方面零基础,孩子们刚入学,学习方...
    会泽165段秋宇阅读 1,826评论 2 2