端口扫描器

这个小项目主要是练习了在事件侦听中使用代码低耦合,但是这篇总结中还会记录一些实际代码中技巧性的东西。

 

首先说明低耦合的设计模式。所谓低耦合,意思就是减少java代码的不同模块间的相互依赖性,提高程序代码的可扩展性。java中,通过定义一个事件侦听的接口,统一处理对某一类事件的侦听。例如,在我的端口扫描器中定义了如下一个接口:

/**
 * 端口扫描时侦听消息的接口
 *
 * @author KnightErrant
 * @time 上午12:35:49 2010-4-18
 *
 */
public interface PortScanListener {

	/**
	 * 将一次成功的扫描通知相应的组件
	 * @param port 端口号
	 * @param isAvailable 这个端口是否可用
	 */
	public void show(int port, boolean isAvailable);

}

 定义好接口后,只需将要对响应该类事件的组件继承该接口,并实现接口中的方法即可。例如:

/**
 * 显示结果的文本区域
 *
 * @author KnightErrant
 * @time 上午02:01:19 2010-4-18
 *
 */
public class myTextArea extends javax.swing.JTextArea implements PortScanListener {

	/**
	 * 实现接口中的方法
	 */
	public void show(int port, boolean isAvailble){
		if(isAvailble){
			this.append("检测到可用的端口:"+port+"\r\n");
		}
	}
	
}

 

/**
 * 显示扫描进度
 *
 * @author KnightErrant
 * @time 下午09:15:54 2010-4-19
 *
 */
public class myProgressBar extends javax.swing.JProgressBar implements PortScanListener {

	/**
	 * 实现接口中的方法
	 */
	public void show(int port, boolean isAvailble){
		count++;
		this.setValue(count+this.getMinimum());
		if(isDone(port)){
			count=0;
		}
	}

}

 然而,接口中的方法其实只做一件事:通知... ...。所以,特定的交互型组件还是要在继承的类中多做点儿文章。例如,一次端口扫描任务可能启动多个线程扫描不同区段的端口,因而接口中的方法无法通知进度条当前扫描过的是第几个端口,这就需要在进度条类中自己定义一个计数器... ...

 

通过这次“端口扫描器”的练习,不仅对低耦合的事件侦听模式有了基本了解,同时也进一步增进了对程序流程的控制感。附件中为这个小程序的源代码。有两处待完善的地方:、

/**
	 * 检测用户填写是否正确
	 * @category 待完善
	 * @param IP 目标机器IP
	 * @param first_check_port 端口扫描下限
	 * @param last_check_port 端口扫描上限
	 * @return TRUE-输入合法;FALSE-输入不合法
	 */
	private boolean checkFillings(String IP, int first_check_port, int last_check_port){
		return false;
	}
	
	/**
	 * 取得常规子线程划分策略
	 * @category 待完善
	 * @param first_check_port 端口扫描下限
	 * @param last_check_port 端口扫描上限
	 * @return integer step
	 */
	private int getDivideStrategy(int first_check_port, int last_check_port){
		return 0;
	}

 

你可能感兴趣的:(设计模式,swing)