1.1 模板方法 : 传统模板
package demo.spring.boot.demospringboot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
abstract class Abstract<T> {
private Logger logger = LoggerFactory.getLogger(getClass());
public T control(String sh) { //定义算法顺序
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 = deal(in);
in.close();
process.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
protected abstract T deal(InputStream inputStream); //定义后期的实现接口
}
public class Client extends Abstract<List<String>> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
protected List<String> deal(InputStream inputStream) {
Reader reader = new InputStreamReader(inputStream);
LineNumberReader lineNumberReader
= new LineNumberReader(reader);
List<String> list;
list = lineNumberReader.lines().collect(Collectors.toList());
try {
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@org.junit.Test
public void test() {
Client client = new Client();
List<String> list = client.control("ls");
logger.info("result:{}", list);
}
}
本文深入探讨了模板方法设计模式的实现,通过一个具体的Java示例,展示了如何使用抽象类和子类来定义算法骨架,并允许子类提供具体实现。介绍了如何通过运行时加载和执行外部命令,以及如何处理命令的输出。
1113

被折叠的 条评论
为什么被折叠?



