DRY原则和设计模式

编程入门 行业动态 更新时间:2024-10-05 13:30:22

DRY<a href=https://www.elefans.com/category/jswz/34/1769377.html style=原则和设计模式"/>

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原则和设计模式

本文发布于:2024-02-28 06:33:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768261.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:原则   模式   DRY

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!