原则和设计模式"/>
DRY原则和设计模式
前两天在做统计程序时,需要读取linux中的日志文件,在网上查了下,就有了结论,于是,根据需要,我写下了这样的代码:
public class dealFile {public static void dealContent(String[] commands){BufferedReader reader=null;try{Process process = Runtime.getRuntime().exec (commands);reader = new BufferedReader (new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine ()) != null){//处理的代码System.out.println(line); }}catch(Exception e){e.printStackTrace();}finally{if(reader!=null){ try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}
可是问题来了,我还需要执行其他的命令,做出不同的处理,也就是,我的处理也需要参数化,该怎么办呢,经过一番思索,进行了这样的处理:
public class ReadLinuxFileHelper {public static void dealContent(String[] commands,DealLinuxFile handler){BufferedReader reader=null;try{Process process = Runtime.getRuntime().exec (commands);reader = new BufferedReader (new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine ()) != null){handler.readLine(line); }}catch(Exception e){e.printStackTrace();}finally{if(reader!=null){ try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}
}
DealLinuxFile.java代码:
public interface DealLinuxFile {/*** 读入数据行* @param line*/void readLine(String line);}
调用的时候:
//job的运行过程报告private void programProcedure(){ String[] beginCommands={"/bin/bash", "-c","grep '开始' "+logFile};String[] endCommands={"/bin/bash", "-c","grep '结束' "+logFile};final StringBuilder logContent=new StringBuilder();ReadLinuxFileHelper.dealContent(beginCommands, new DealLinuxFile() { @Overridepublic void readLine(String line) {logContent.append(line); } });ReadLinuxFileHelper.dealContent(endCommands, new DealLinuxFile() { @Overridepublic void readLine(String line) {logContent.append(line);} });dealLogContent(logContent);}
用这种方式,实现了处理过程的参数化。
写完之后,感觉这种方式好像有点奇怪,之前没有用这种方式写过程序,想了想,这好像是一个什么模式,在网上搜了下,有一篇文章讲的挺好:.html,
原来这就是模板模式或者说是策略模式。
想了想自己思考的过程,起初自己只是想重用代码,然后很自然的就派生出一个接口,然后发现这居然就是一个设计模式,之所以会有这种结果,我想是两方面造成的:
1、厚积薄发,经过几年的开发,自然就有了这种功力。
2、之前读的关于设计模式的记忆被启发了。
其实这应该是DRY(Don't repeat yousellf)思想的运用,设计模式在这里是对该原则的实现。
不清楚理论,刚开始用的时候还有点误打误撞,但是我仔细的了解了模板和策略模式的理论后,对整个的过程就很清楚了,理论也就是这样指导实践的,实践反过来加深了对理论的理解。
更多推荐
DRY原则和设计模式
发布评论