`

告诉你什么是优雅的设计(2)--------重构EasyMonitor

    博客分类:
  • Java
阅读更多
  EasyMonitor1.0出来后不久,玩着玩着,我就敏锐地发现"被第一颗子弹击中",设计还有问题。根据先贤的一些经验告诉我们,被击中后就应该马上重构。于是,马不停蹄,着手1.5版本的改造。为什么1.0就直奔1.5呢,因为这次重构之后的结构已经与原来的设计有了比较大的变化,也扩展了一些功能。
可能你已经迫不及待想知道第一颗子弹是什么?研究了EasyMonitor1.0设计的同学,不知道有没有发现,action所做的扩展无法被processor复用,反之亦然。具体地说,就是监视动作无法成为处理动作。例如,你想在处理动作中也去进行url监控,则不得不在processor中重新实现一次。
  如何解决这个问题呢?伟大的java设计者已经给了我们设计的灵感,将世间万物抽象为一个Object,任何东西都从之继承。
于是一个优雅的设计方案浮出水面,我们将所有的行为都抽象成一个Action。下面是1.5的类图,不妨与1.0作个对比:



以下是一个案例的配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<TaskManager>
		<!-- 周期性任务 -->
		<ScheduleTask id="2" name="98服务器监视">
		
			<!-- 时间间隔,单位是秒 -->
		    <interval>30</interval>
		    
		    <!-- URL监视动作 -->
			<Monitor>
				<url>http://192.168.1.98:8080</url>
			</Monitor>
			
			<!-- 监控结果处理器 -->
			<Processor>
				<!-- 监视成功处理队列  
				<OnSuccess>		
					<RunProgram>
						<path>cmd /c start notepad</path>
					</RunProgram>
				</OnSuccess>
				-->
				<!-- 监视失败处理队列  -->
				<OnFailure>
					
					<RunProgram>
						<path>E:\cluster\tomcat7\bin\startup.bat</path>
					</RunProgram>
				
					<!-- 发送邮件 -->
					<SendMail>
						<receivers>holdmydream@126.com,javaeye2010@126.com</receivers>
						<subject>警告</subject>
						<content>你的程序已经杯具。不必太伤心,神马都是浮云。</content>
					</SendMail>
						
				</OnFailure>
			</Processor>	
		</ScheduleTask>	
		
		
		<!-- 定时任务 -->
		<OnTimeTask id="1" name="100服务器监视">
			<!-- yyyy-MM-dd hh:mm:ss -->
		    <time>2011-01-20 15:49:30</time>
			<Monitor>
				<url>http://192.168.1.100:8080</url>
			</Monitor>
			<Processor>		
				<OnSuccess>	
					<RunProgram>
						<path>cmd /c start notepad</path>
					</RunProgram>
				</OnSuccess>			
				<OnFailure>	
					<RunProgram>
						<path>cmd /c start msconfig</path>
					</RunProgram>
				</OnFailure>
			</Processor>	
		</OnTimeTask>
		
</TaskManager>





程序打包下载。

通过这次重构告诉大家三件事:

1.第一颗子弹原则很给力
2.学会模式而后忘记模式
3.没有完美的设计,只有更优雅的设计




3
4
分享到:
评论
5 楼 泰山北斗 2011-11-08  
yangguo 写道
泰山北斗 写道
监听动作的结果应该以事件的形式将结果通知给处理器。处理器和监听根本就是毫无关系!
垃圾的设计还拿出来显摆什么。


看你个猪头的回答就知道认为只有事件编程模型。以为所有设计都是事件驱动。

猪头,难道一切都是Action吗?
4 楼 angie_hawk7 2011-11-07  
之前看过你写的:“哥写的不是代码是寂寞”,那个帖子,太有意思了。看过你其它的帖子 很有个性,总感觉有点武侠里的高手,很是钦佩。
3 楼 yangguo 2011-11-07  
泰山北斗 写道
监听动作的结果应该以事件的形式将结果通知给处理器。处理器和监听根本就是毫无关系!
垃圾的设计还拿出来显摆什么。


看你个猪头的回答就知道认为只有事件编程模型。以为所有设计都是事件驱动。
2 楼 泰山北斗 2011-11-04  
监听动作的结果应该以事件的形式将结果通知给处理器。处理器和监听根本就是毫无关系!
垃圾的设计还拿出来显摆什么。
1 楼 Lambada 2011-06-08  
新手表示不懂,但是学习了!

相关推荐

Global site tag (gtag.js) - Google Analytics