1.2 模板方法:泛型模板
定义:
定义一个操作中的算法框架,把一些步骤延迟到子类去实现,可以让子类不需要改变算法结构而重新定义算法
举例:泛型模板模板
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
interface CallBack<T> { //用于回调的接口
T deal(InputStream in) throws IOException;
}
public class Test {
private Logger logger = LoggerFactory.getLogger(getClass());
/**
* 使用了模板泛型方法,处理input留作后期实现
* @param sh
* @param callBack
* @param <T>
* @return
*/
public <T> T executeLinuxCmd(String sh, CallBack<T> callBack) {
String cmd = sh;
logger.info("sh is :{}", cmd);
Runtime run = Runtime.getRuntime();
InputStream in = null;
T result = null;
try {
Process process = run.exec(cmd);
in = process.getInputStream();
result = callBack.deal(in); //后期处理的逻辑地点
in.close();
process.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 调用了模板方法,调用时实现逻辑
* @param sh
* @return
*/
public List<String> getResult(String sh) {
return this.executeLinuxCmd(sh, in -> {
Reader reader = new InputStreamReader(in);
LineNumberReader lineNumberReader
= new LineNumberReader(reader);
List<String> list = new ArrayList<>();
String line;
while ((null != (line = lineNumberReader.readLine()))) {
list.add(line);
}
lineNumberReader.close();
return list;
});
}
}