美文网首页
STRATEGY 模式

STRATEGY 模式

作者: Mrs_Gao | 来源:发表于2018-06-04 23:44 被阅读0次

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原则。在该模式中,每个具体的策略实现都可以当做参数来使用,这对于同一个问题来说,可以有不同的算法具体实现。另外,我们写框架时,有些逻辑是不确定的,它们有很多种情况,这个时候可以对外暴露一个接口,让框架使用者针对这个接口实现具体逻辑,再交给框架调用。

相关文章

网友评论

      本文标题:STRATEGY 模式

      本文链接:https://www.haomeiwen.com/subject/igaysftx.html