﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-如坐春风-随笔分类-Object Orient Programming</title><link>http://www.blogjava.net/sitinspring/category/23516.html</link><description>人生苦短，要紧跟自己的梦想，爱你所做的事业。</description><language>zh-cn</language><lastBuildDate>Sat, 12 Apr 2008 02:37:04 GMT</lastBuildDate><pubDate>Sat, 12 Apr 2008 02:37:04 GMT</pubDate><ttl>60</ttl><item><title>三种权限设计方案的归纳和比较</title><link>http://www.blogjava.net/sitinspring/archive/2008/04/10/191768.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Thu, 10 Apr 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2008/04/10/191768.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/191768.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2008/04/10/191768.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/191768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/191768.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 权限设计是很多系统重要的组成部分，主要用于控制功能和流程，本文将几种常见的权限设计方案（权限系统的名都是自己起的）的基本设计写出来，其中不恰当处还请大家指出，我们来讨论一下.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2008/04/10/191768.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/191768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2008-04-10 10:20 <a href="http://www.blogjava.net/sitinspring/archive/2008/04/10/191768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将阿拉伯数字转大写汉字程序的类</title><link>http://www.blogjava.net/sitinspring/archive/2008/03/25/188587.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Tue, 25 Mar 2008 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2008/03/25/188587.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/188587.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2008/03/25/188587.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/188587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/188587.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转化效果：<br><br>阿拉伯数字等于：0 大写汉字等于：零整<br>阿拉伯数字等于：3.14159 大写汉字等于：叁点壹肆壹伍玖<br>阿拉伯数字等于：101.3 大写汉字等于：壹佰零壹点叁<br>阿拉伯数字等于：10203040506070809 大写汉字等于：壹萬兆零贰佰零叁兆零肆佰零伍億零陆佰零柒萬零捌佰零玖整<br>阿拉伯数字等于：7897645 大写汉字等于：柒佰捌拾玖萬柒仟陆佰肆拾伍整<br>阿拉伯数字等于：500000001000000 大写汉字等于：伍佰兆零壹佰萬整<br>阿拉伯数字等于：2435685 大写汉字等于：贰佰肆拾叁萬伍仟陆佰捌拾伍整<br>阿拉伯数字等于：5345438976 大写汉字等于：伍拾叁億肆仟伍佰肆拾叁萬捌仟玖佰柒拾陆整<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2008/03/25/188587.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/188587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2008-03-25 21:15 <a href="http://www.blogjava.net/sitinspring/archive/2008/03/25/188587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计构建一个软件程序的基本步骤探讨</title><link>http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sat, 26 Jan 2008 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/177949.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/177949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/177949.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 软件的核心任务不外乎是收集和整理数据，然后以用户需要的形式表现给他们而已，此外还有数据的存储，数据的传输等外围任务。<br>数据的收集，整理，表现，存储和传输就是软件的主要任务，它们也是程序员的主要工作内容，也是程序员编写代码的最终目的。<br>那么该如何编写代码让软件完成它的主要任务呢？编写代码的过程是否有规律可循？编写代码需要注意那些方面的问题？本人想就这些问题罗列自己一些粗浅的看法，并大家进行一些探讨。&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/177949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2008-01-26 21:19 <a href="http://www.blogjava.net/sitinspring/archive/2008/01/26/177949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用泛型类简化服务层(Service)类的设计</title><link>http://www.blogjava.net/sitinspring/archive/2007/12/28/171243.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Fri, 28 Dec 2007 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/12/28/171243.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/171243.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/12/28/171243.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/171243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/171243.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 领域层类可以理解为程序运行时数据流的功能单位,而服务层类是为领域层类提供服务的,常见的服务有增删改查等操作,在没有泛型之前,我们只能采用一个服务类为一个领域类提供服务的方案,如果说服务的性质类似,如都是增删改查等,则代码的功能重复性很高,维护起来也很麻烦.如果采用了泛型类,我们就可以把性质相似的服务类归纳成一个,很大程度上能简化编码.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/12/28/171243.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/171243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-12-28 16:47 <a href="http://www.blogjava.net/sitinspring/archive/2007/12/28/171243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个解析文本中的信息并向对象赋值过程的思考.</title><link>http://www.blogjava.net/sitinspring/archive/2007/12/07/166082.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Fri, 07 Dec 2007 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/12/07/166082.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/166082.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/12/07/166082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/166082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/166082.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一个解析文本中的信息并向对象赋值过程的思考,比较浅显.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/12/07/166082.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/166082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-12-07 16:35 <a href="http://www.blogjava.net/sitinspring/archive/2007/12/07/166082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>私有的成员能被子类继承吗?</title><link>http://www.blogjava.net/sitinspring/archive/2007/12/04/165288.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Tue, 04 Dec 2007 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/12/04/165288.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/165288.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/12/04/165288.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/165288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/165288.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: private的成员变量能被子类继承吗?回答是父类的所有成员变量包括私有成员变量都会被子类继承,private只是把可见性限制在改类内部的方法中而已,子类仍然可以通过父类的成员函数来访问不可见的从父类继承下来的私有成员.<br><br>这个机制对于复杂的类体系中保护父类不被滥用很有好处.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/12/04/165288.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/165288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-12-04 20:42 <a href="http://www.blogjava.net/sitinspring/archive/2007/12/04/165288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目录树的建立,遍历及批量删除</title><link>http://www.blogjava.net/sitinspring/archive/2007/12/03/164988.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Mon, 03 Dec 2007 12:03:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/12/03/164988.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/164988.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/12/03/164988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/164988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/164988.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文描述了目录树的建立,遍历及批量删除的整个过程.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/12/03/164988.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/164988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-12-03 20:03 <a href="http://www.blogjava.net/sitinspring/archive/2007/12/03/164988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用XML作为持久存储介质的解决方案续 </title><link>http://www.blogjava.net/sitinspring/archive/2007/11/15/160696.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Thu, 15 Nov 2007 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/11/15/160696.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/160696.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/11/15/160696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/160696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/160696.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文是"使XML作为持久存储介质的解决方案 "的续文.上文中对成员的CRUD都采用同步进行资源保护,这种方案实际上是保护过度,带来的消极影响是降低了程序的效率,在下面的例子中,我们应该使用读写锁对资源进行保护.关于读写锁的分析请见"读写锁的OO分析(http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html)"....&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/11/15/160696.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/160696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-11-15 10:22 <a href="http://www.blogjava.net/sitinspring/archive/2007/11/15/160696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MVC1,MVC2简析</title><link>http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Mon, 05 Nov 2007 12:15:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/158343.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/158343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/158343.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一般来说，可以把系统粗略的分为三个层次，视图层，简称为View，它负责数据的输出和输入；业务层，简称为Model，它代表程序的实际业务；控制层，简称为Controller，处理界面的相应并调用业务层进行处理，有时把View和Controller两层合称为UI层。在程序发展的历史上，MVC模式进过了多次演化，MVC1和MVC2是两种比较典型的模式，它们的区别主要在于View和Model的联系方式...&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/158343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-11-05 20:15 <a href="http://www.blogjava.net/sitinspring/archive/2007/11/05/158343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读写锁的OO分析</title><link>http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sun, 21 Oct 2007 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/154652.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/154652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/154652.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们有时会遇到对同一个内存区域如数组或者链表进行多线程读写的情况,一般来说有以下几种处理方式:<br>1.不加任何限制,多见于读取写入都很快的情况,但有时也会出现问题.<br>2.对读写函数都加以同步锁,比如使用singleton模式,这下问题是没了,但效率也下去了,比如说两个读取线程不是非要排队进入不可.<br>3.读写锁,安全和效率都得到了解决,特别合适读线程多于写线程的情况.也就是下面将要展现的模式.<br><br>读写锁的本意是分别对读写状态进行互斥区分,有互斥时才加锁,否则放行.互斥的情况有:<br>1.读写互斥.<br>2.写写互斥.<br>不互斥的情况是:读读,这种情况不该加以限制.<br><br>我们只要让锁对象知道当前读写状态就可以了,再根据情况进行锁定和解锁,然后再分情况进行锁定.请看代码&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/154652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-10-21 11:42 <a href="http://www.blogjava.net/sitinspring/archive/2007/10/21/154652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工人自动获取任务的OO分析</title><link>http://www.blogjava.net/sitinspring/archive/2007/10/20/154437.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sat, 20 Oct 2007 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/10/20/154437.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/154437.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/10/20/154437.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/154437.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/154437.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这篇文章是"调度员,工人及任务的OO分析过程"的续篇.<br><br>上次的情况是由调度员主动分配任务,但有些情况下需要工人自动取得任务而不是由调度员分配,这时需要对线程进行通知,使用的主要方法就是对象的wait(),notify(),notifyAll()三个函数,它们都必须从同步方法(synchronized method)中调用.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/10/20/154437.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/154437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-10-20 09:53 <a href="http://www.blogjava.net/sitinspring/archive/2007/10/20/154437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>调度员,工人及任务的OO分析过程.</title><link>http://www.blogjava.net/sitinspring/archive/2007/10/05/150527.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Fri, 05 Oct 2007 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/10/05/150527.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/150527.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/10/05/150527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/150527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/150527.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 日常编码中,我们常需要为各种业务进行建模,为工厂中的任务调度建模就很有意思的,它的主要流程是基本是这样:<br>1.调度员将工件图纸交付给工人,这是任务的下达.<br>2.工人工作,完成工件,这是任务的进行过程.<br>3.工件完成后,工人将图纸和工件返还给调度员,或者到了确定的时间后由调度员去取.这是任务的完成.<br>4.重复上述三个步骤.<br><br>在这个流程中,还存在一些特征:<br>1.工人可以有多项任务,但他在一个时间只能做一个活,具体做那个由任务的优先级确定.<br>2.任务完成后要让调度员知道,现实中是工人来找调度员或者调度员找工人来实现的.<br><br>从上述情况分析,我们需要任务,工人,调度员三个类来完成建模,另外为了方便任务的存储和管理,还需要一个任务串类来辅助.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/10/05/150527.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/150527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-10-05 12:52 <a href="http://www.blogjava.net/sitinspring/archive/2007/10/05/150527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内容及其标志的OO分析过程(DB4O实现)</title><link>http://www.blogjava.net/sitinspring/archive/2007/10/03/150284.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Wed, 03 Oct 2007 10:45:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/10/03/150284.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/150284.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/10/03/150284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/150284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/150284.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 日常开发中,内容及其标志的OO化是经常需要我们处理的问题,下面这些都是这个问题的实际泛化:1.文章与标签.2.媒体文件和标签.3.选手和各项得分.它们的共同点是:主体内容拥有树状的标志集合.也就是说,一个内容对应一个标志集合,集合中的元素是树状的.类图如下:"内容"类拥有一个"标志集合"的成员,"标志集合"类拥有多个"标志"类的成员,标志类用一个parentTag成...&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/10/03/150284.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/150284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-10-03 18:45 <a href="http://www.blogjava.net/sitinspring/archive/2007/10/03/150284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何作出一个完善的分析复杂嵌套SQL语句的程序? (附上自己做的分析嵌套SQL语句的两个类)</title><link>http://www.blogjava.net/sitinspring/archive/2007/09/17/145819.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Mon, 17 Sep 2007 05:12:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/09/17/145819.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/145819.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/09/17/145819.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/145819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/145819.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 下面是我在自己的一个项目中用来分析嵌套SQL语句的两个类,它们的基本做法就是靠括号来区别嵌套语句的层,然后用类似进栈的方法将复杂SQL分离成一个个小的简单SQL语句,最好再用出栈的方法将整个SQL整形好.有完善的括号存在的SQL语句整形效果还是可以的,但是整个过程严重依赖括号,而SQL语句中括号不是必须的,这时整形效果就差了,如何作出一个完善的分析复杂嵌套SQL语句的程序,好像不容易,我一时还没有头绪,希望大家能给我提个醒.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/09/17/145819.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/145819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-09-17 13:12 <a href="http://www.blogjava.net/sitinspring/archive/2007/09/17/145819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用分治法解决级联对象与相应XML之间的互相转化问题</title><link>http://www.blogjava.net/sitinspring/archive/2007/09/17/145660.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sun, 16 Sep 2007 16:25:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/09/17/145660.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/145660.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/09/17/145660.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/145660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/145660.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 级联对象与相应XML之间的互相转化是在制作Web Service或者JMS程序时常遇到的问题,此文讨论了如何简化级联对象和相应XML的相互转化程序的方法.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/09/17/145660.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/145660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-09-17 00:25 <a href="http://www.blogjava.net/sitinspring/archive/2007/09/17/145660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使XML作为持久存储介质的解决方案</title><link>http://www.blogjava.net/sitinspring/archive/2007/08/27/139918.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Mon, 27 Aug 2007 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/08/27/139918.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/139918.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/08/27/139918.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/139918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/139918.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 注:本文是"使用XML文件作为Web系统持久层的OO分析过程"(http://www.blogjava.net/sitinspring/archive/2007/06/03/121640.html)的续文.<br><br>对一些需要将数据持久化的小型程序中,传统的关系型数据库显得庞大而不实用,而使用XML是一种较好的选择.本文将就设计一个合理的XML持久化的解决方案进行探讨.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/08/27/139918.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/139918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-08-27 14:29 <a href="http://www.blogjava.net/sitinspring/archive/2007/08/27/139918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在C# WinForm程序中创建控件数组及相应的事件处理</title><link>http://www.blogjava.net/sitinspring/archive/2007/08/04/134367.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sat, 04 Aug 2007 00:18:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/08/04/134367.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/134367.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/08/04/134367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/134367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/134367.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它.<br><br>总结起来,在C#中创建控件数组很简单,首先在类中创建一个控件类型的数组,然后初始化它,具体初始化是动态创建还是链接到已有控件可以根据情况自行选择,然后为数组元素添加事件,最后实现事件即可,在事件实现中即可以通过转化sender来得到相应控件.<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/08/04/134367.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/134367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-08-04 08:18 <a href="http://www.blogjava.net/sitinspring/archive/2007/08/04/134367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更适合Swing程序的MVC方案</title><link>http://www.blogjava.net/sitinspring/archive/2007/07/19/131268.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Thu, 19 Jul 2007 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/07/19/131268.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/131268.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/07/19/131268.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/131268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/131268.html</trackback:ping><description><![CDATA[MVC有MVC1和MVC2的区别,它们的区别在于MVC1中用Model来通知View进行改变,而MVC2中使用Controller来通知View.在桌面程序中一般采用MVC1,而Web程序多采用MVC2,这是因为web程序中,Model无法知道View的原因.<br><br>在Swing程序中,我们通常采用让View实现Observer接口,让Model继承Observable类来实现MVC1,而让Controller把它们创建及连接起来,具体代码如下:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_24_230_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_230_Open_Text.style.display='none'; Codehighlighter1_24_230_Closed_Image.style.display='inline'; Codehighlighter1_24_230_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_24_230_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_230_Closed_Text.style.display='none'; Codehighlighter1_24_230_Open_Image.style.display='inline'; Codehighlighter1_24_230_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;XXXControl&nbsp;</span><span id=Codehighlighter1_24_230_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_24_230_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;XXXModel&nbsp;model&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;XXXView&nbsp;view&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_119_221_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_221_Open_Text.style.display='none'; Codehighlighter1_119_221_Closed_Image.style.display='inline'; Codehighlighter1_119_221_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_119_221_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_221_Closed_Text.style.display='none'; Codehighlighter1_119_221_Open_Image.style.display='inline'; Codehighlighter1_119_221_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;XXXControl()&nbsp;</span><span id=Codehighlighter1_119_221_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_119_221_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;XXXModel();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;XXXView();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.addObserver(view);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>而Model进过处理后得到了结果,它采用Observable的notifyObservers()方法来通知View进行改变,而View的public void update(Observable o, Object arg)方法将相应这一改变,它通过解析Observable类型的对象o得到处理结果,再进行具体的表现层改变.<br><br>粗看起来MVC各司其职,很完美,但还有不和谐的隐患:<br>1.View必须知道解析Model,造成了二者的耦合.<br>2.View非得实现Observer接口,Model非得继承Observable类,这个处理不是必要的.<br>3.这种模式只适合即时处理,即相应很快的处理,对于耗时过程并不适合.<br>4.由于Model中数据众多,很多时候我们还需要建立一个常量类来区分各种情况和决定View更新的地方,进一步加重了类之间的耦合程度.<br><br>综上,我觉得对于稍大的Swing程序,MVC2+线程回调方式更适合,它的主要处理是:<br>1.依然由Controller创建View和Model,它们担负的职责也和原来一样,但是View不实现Observer接口,Model不继承Observable类,它们该怎么样还是怎么样,而让Controller来充当它们之间的中介者.<br>2.如果是即时处理,可以在Controller中添加事件处理时就直接写来.如果是耗时处理,可以将View和Model的引用(或Model中元素的引用)传递给一个线程处理类,具体的运算和界面反应在线程处理类中完成.<br>下面是一个调用例子:<br>new FetchTablesThread(model.getDataSource(), view,schema).start();<br><br>下面是线程类的例子:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_50_1478_Open_Image onclick="this.style.display='none'; Codehighlighter1_50_1478_Open_Text.style.display='none'; Codehighlighter1_50_1478_Closed_Image.style.display='inline'; Codehighlighter1_50_1478_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_50_1478_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_50_1478_Closed_Text.style.display='none'; Codehighlighter1_50_1478_Open_Image.style.display='inline'; Codehighlighter1_50_1478_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;FetchTablesThread&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;BaseThread&nbsp;</span><span id=Codehighlighter1_50_1478_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_50_1478_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Logger.getLogger(FetchTablesThread.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;schema;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;FetchTablesThread(DataSource&nbsp;dataSource,&nbsp;SqlWindowView&nbsp;view,<br><img id=Codehighlighter1_240_294_Open_Image onclick="this.style.display='none'; Codehighlighter1_240_294_Open_Text.style.display='none'; Codehighlighter1_240_294_Closed_Image.style.display='inline'; Codehighlighter1_240_294_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_240_294_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_240_294_Closed_Text.style.display='none'; Codehighlighter1_240_294_Open_Image.style.display='inline'; Codehighlighter1_240_294_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;schema)&nbsp;</span><span id=Codehighlighter1_240_294_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_240_294_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">(dataSource,&nbsp;view);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.schema&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;schema;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_316_1476_Open_Image onclick="this.style.display='none'; Codehighlighter1_316_1476_Open_Text.style.display='none'; Codehighlighter1_316_1476_Closed_Image.style.display='inline'; Codehighlighter1_316_1476_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_316_1476_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_316_1476_Closed_Text.style.display='none'; Codehighlighter1_316_1476_Open_Image.style.display='inline'; Codehighlighter1_316_1476_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;run()&nbsp;</span><span id=Codehighlighter1_316_1476_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_316_1476_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputPanel&nbsp;outputPanel&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;view.getTabbedPanel().getInputOutputPanel().getOutputPanel();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_415_1254_Open_Image onclick="this.style.display='none'; Codehighlighter1_415_1254_Open_Text.style.display='none'; Codehighlighter1_415_1254_Closed_Image.style.display='inline'; Codehighlighter1_415_1254_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_415_1254_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_415_1254_Closed_Text.style.display='none'; Codehighlighter1_415_1254_Open_Image.style.display='inline'; Codehighlighter1_415_1254_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_415_1254_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_415_1254_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_464_569_Open_Image onclick="this.style.display='none'; Codehighlighter1_464_569_Open_Text.style.display='none'; Codehighlighter1_464_569_Closed_Image.style.display='inline'; Codehighlighter1_464_569_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_464_569_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_464_569_Closed_Text.style.display='none'; Codehighlighter1_464_569_Open_Image.style.display='inline'; Codehighlighter1_464_569_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(dataSource.getDbtype().equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mysql</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;</span><span id=Codehighlighter1_464_569_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_464_569_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Specail&nbsp;Process&nbsp;for&nbsp;MySql</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FetchTables4MySqlThread(dataSource,&nbsp;view,&nbsp;schema).start();<br><img id=Codehighlighter1_576_1250_Open_Image onclick="this.style.display='none'; Codehighlighter1_576_1250_Open_Text.style.display='none'; Codehighlighter1_576_1250_Closed_Image.style.display='inline'; Codehighlighter1_576_1250_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_576_1250_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_576_1250_Closed_Text.style.display='none'; Codehighlighter1_576_1250_Open_Image.style.display='inline'; Codehighlighter1_576_1250_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_576_1250_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_576_1250_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Ordinary&nbsp;Process&nbsp;for&nbsp;other&nbsp;DB</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;tables&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;dataSource.getTablesInSchema(schema);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_699_1029_Open_Image onclick="this.style.display='none'; Codehighlighter1_699_1029_Open_Text.style.display='none'; Codehighlighter1_699_1029_Closed_Image.style.display='inline'; Codehighlighter1_699_1029_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_699_1029_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_699_1029_Closed_Text.style.display='none'; Codehighlighter1_699_1029_Open_Image.style.display='inline'; Codehighlighter1_699_1029_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tables.size()&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_699_1029_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_699_1029_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Find&nbsp;tables&nbsp;under&nbsp;schema</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view.getCatalogTablesPanel().getMultiTable().refreshTable(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tables);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.showText(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Find&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;tables.size()<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;tables&nbsp;under&nbsp;schema:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;schema<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;successfully!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.appendOutputText(text);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(text);<br><img id=Codehighlighter1_1036_1245_Open_Image onclick="this.style.display='none'; Codehighlighter1_1036_1245_Open_Text.style.display='none'; Codehighlighter1_1036_1245_Closed_Image.style.display='inline'; Codehighlighter1_1036_1245_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1036_1245_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1036_1245_Closed_Text.style.display='none'; Codehighlighter1_1036_1245_Open_Image.style.display='inline'; Codehighlighter1_1036_1245_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1036_1245_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1036_1245_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Can't&nbsp;find&nbsp;tables&nbsp;under&nbsp;schema</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.showText(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Can't&nbsp;find&nbsp;any&nbsp;table&nbsp;under&nbsp;schema:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;schema;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.appendOutputText(text);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(text);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1277_1473_Open_Image onclick="this.style.display='none'; Codehighlighter1_1277_1473_Open_Text.style.display='none'; Codehighlighter1_1277_1473_Closed_Image.style.display='inline'; Codehighlighter1_1277_1473_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1277_1473_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1277_1473_Closed_Text.style.display='none'; Codehighlighter1_1277_1473_Open_Image.style.display='inline'; Codehighlighter1_1277_1473_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;</span><span id=Codehighlighter1_1277_1473_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_1277_1473_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.showText(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Can't&nbsp;find&nbsp;any&nbsp;table&nbsp;under&nbsp;schema:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;schema</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;and&nbsp;errorMsg=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">ex.getMessage();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputPanel.appendOutputText(text);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(text);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>这样做有两个好处一是使程序结构松散化,适于修改,二是相对传统的MVC2,Controller中事件处理的代码也容易变得简单而清晰,可维护性更佳.<br><br>综上,我认为MVC2+线程回调方式是一种值得推荐的Swing桌面程序写法. <br><br>关于线程回调方式,您可以参考:<br><a href="http://www.blogjava.net/sitinspring/archive/2007/06/28/126809.html">http://www.blogjava.net/sitinspring/archive/2007/06/28/126809.html</a><br><br>关于MVC,您可以参考:<br><a href="http://junglesong.yculblog.com/post.2665424.html">http://junglesong.yculblog.com/post.2665424.html</a> 
<img src ="http://www.blogjava.net/sitinspring/aggbug/131268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-07-19 14:47 <a href="http://www.blogjava.net/sitinspring/archive/2007/07/19/131268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于权限系统的设计</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/11/123330.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Mon, 11 Jun 2007 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/11/123330.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/123330.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/11/123330.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/123330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/123330.html</trackback:ping><description><![CDATA[权限是企业应用中常见限制关系，比如说有项目，成员两种类，成员对项目的权限不一，对不同项目还有不同权限，怎么设计这样的系统呢？<br><br>对于这样的系统一种常见的处理方式是固化，就是按等级给定权限，比如部门经理拥有所有项目的CRUD权限，项目经理只对自己的项目有CRUD权限，一般成员只有R权限，这样的设计不能完全反映现实的关系。只能用于非常僵化的场合。<br><br>实际上，项目，成员的关系类似于房间的门和人的关系，载它们之间加上钥匙一切都迎刃而解。<br><br>钥匙定义如下<br>class Key{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int projectId;// 项目的唯一ID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean create;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean read;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean update;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean delete;<br>}<br><br>钥匙串定义如下：<br>class KeyBunch{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map&nbsp; buch;// 里面放的钥匙的hashMap<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean isCanAccess(Project project){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br><br>然后把钥匙串作为Member类的一个子项就可以了,Key由Project类生成,然后附加到Member类的KeyBunch中,其它函数可以根据情况书写.<br><br>这样,有了Key类和KeyBunch类,Project类和Member类的权限关系就变得合乎自然了,Project类和Member类也进一步解耦.<br><br>老子曰"人法地,地法天,天法道,道发自然",真是一语中的. 
<img src ="http://www.blogjava.net/sitinspring/aggbug/123330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-11 10:55 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/11/123330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用异常处理解决执行时有多种命令行参数的问题</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/08/122817.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Fri, 08 Jun 2007 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/08/122817.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/122817.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/08/122817.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/122817.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/122817.html</trackback:ping><description><![CDATA[在一个项目中,要求一个程序按设定文件执行,后来追加需求,让它也可按命令行参数执行.<br>原执行方式是这样的:<br>&gt;program&nbsp; settingFilePath<br>其中settingFilePath是xml格式<br><br>要求追加这样的执行方式<br>&gt;program param01 param02 ....<br><br>面对这样的需求,程序结构无需有大的变动,使用try...catch...来增加一种异常处理即可<br><br>变化后的程序结构如下:<br>try{<br>&nbsp;&nbsp;&nbsp;&nbsp; // 进行原有处理<br>&nbsp;&nbsp;&nbsp;&nbsp; ......<br>}catch(IllegalSettingFileException ex){<br>&nbsp;&nbsp;&nbsp; // 进行命令行方式处理<br>}<br>....<br><br>因为原程序处理时会读取设定文件,取出其中信息,如果文件不存在或者取得的参数不正确则会抛出IllegalSettingFileException 异常,这时我们让它再执行追加的处理方式即可.即程序发现按第一种方式执行不了时,会按第二种方式运行.我觉得这比分支判断更简单且易于扩充,是比较好的一种处理方式.<br><br><br><br>
<img src ="http://www.blogjava.net/sitinspring/aggbug/122817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-08 12:23 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/08/122817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从一个例子的重构过程谈开来</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/06/122326.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Wed, 06 Jun 2007 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/06/122326.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/122326.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/06/122326.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/122326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/122326.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对于处理订单,折扣,价格的一个例子,本文分别论述了传统方案,类工厂,反射,Spring之IoC等各种方案的优缺点,并得出反射和接口是Java程序的大道的结论.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/06/06/122326.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/122326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-06 11:37 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/06/122326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>能为你的程序锦上添花的五种程序组织形式</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Tue, 05 Jun 2007 05:00:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/122119.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/122119.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/122119.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 形式一."见兔撒鹰":如果有一个类有一个集合成员,可以在为此成员添加元素时再把具体集合建立起来,以免浪费空间和时间.<br>形式二."只管结果,不顾过程":从集合中取区间元素时,直接从上下限之间取来,让try...catch...去处理越界的事.<br>形式三."奉旨行事":在查询中,如果把查询条件和遴选过程分开来更有益,程序也因此解耦合.这才是OO化的查询.<br>形式四."化繁为简":将多个分支语句变换为一个查表结构,这样做对扩充程序结构,修改具体数额都很方便,使程序更易于维护.还可以把归结出的表结构放在持久介质中如XML文件,数据库等,用到的时候再取,这样做在条件变化时不需要修改程序.<br>形式五."分而治之":将分支语句的执行部分分散到单独的类中处理,降低了系统耦合度,程序也更容易维护.&nbsp;&nbsp;<a href='http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html'>阅读全文</a><img src ="http://www.blogjava.net/sitinspring/aggbug/122119.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-05 13:00 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/05/122119.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以相声为切入点谈谈继承,接口和抽象类</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/04/121715.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sun, 03 Jun 2007 17:33:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/04/121715.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/121715.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/04/121715.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/121715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/121715.html</trackback:ping><description><![CDATA[<font face=Arial>继承,接口,抽象类的区别是面试官最喜欢问的问题,因为编程中常用,这里不想说那些老生常谈,只想借相声打个比方.<br><br>继承好比家学渊源,所谓"忠厚传家久,诗书继世长",家长总会潜移默化的影响下一代,下一代也会在不经意中学习前辈的特点,但因为年少分辨能力不高加上世易时移有些优点已经不再是有点甚至会变成缺点,下一代会把前辈的优缺点不分良莠的继承下来.这也是日后出现问题的根源.<br><br>接口好比拜师学艺,"入了这个门,就得说这行话",比如相声界说学逗唱四门是必须要学的,但是"师傅领进门,修行在个人",学得怎么样还全看自己,指望不费力的继承什么是不可能的,具体功夫还得个人来过. 因为是自己来,具体实现成什么样自由度也很大,比如四门功课中的"唱",原指唱太平歌词,但因为爱听的少,现在相声演员已经不要求这个了,改为唱歌唱戏的唱,其实严格界定的话是"学"的一种.这也无所谓对错,郭德刚坚持唱太平歌词也行,笑林唱流行歌曲也不错,总之实现了就可以,实现得怎么样则留给实践来检验.一个类可以同时实现多个接口,就和艺人拜几个师傅是没有问题的,郭德刚就同时实现了大鼓和相声两个接口.<br><br>抽象类则介于继承和接口之间,既可不费力的从上一代继承,也可强制实现某接口,有如某大师收自己的孩子为徒,当然相声界不让这么干,其它曲艺行业还是可以的,比如京剧界的梅兰芳和其子梅葆玖,既有言传身教,也有强制实现,综合了继承和接口的特点.<br><br>具体怎么用它们要看实际需要,如果是为了实现继承体系,当然是用继承;如果只是强制子类必须和父类统一口径,自然是用接口;如果子类说统一口径行,但必须给我些东西,那还是用抽象类不可.</font><br>
<img src ="http://www.blogjava.net/sitinspring/aggbug/121715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-04 01:33 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/04/121715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用XML文件作为Web系统持久层的OO分析过程</title><link>http://www.blogjava.net/sitinspring/archive/2007/06/03/121640.html</link><dc:creator>如坐春风</dc:creator><author>如坐春风</author><pubDate>Sun, 03 Jun 2007 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/sitinspring/archive/2007/06/03/121640.html</guid><wfw:comment>http://www.blogjava.net/sitinspring/comments/121640.html</wfw:comment><comments>http://www.blogjava.net/sitinspring/archive/2007/06/03/121640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sitinspring/comments/commentRss/121640.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sitinspring/services/trackbacks/121640.html</trackback:ping><description><![CDATA[在一个Web系统中有这样的需求,一个页面需要对一个XML文件进行CRUD等操作,如何设计一个系统适合这样的需求呢?<br><br>最容易直接想到的是一个类完成节点的CRUD及IO操作,但这违反了类的设计原则--类应当只有一个中心任务.<br><br>所以按功能来分我们必须要两个类:<br>一个类负责节点CRUD操作;// 简称CrudClass<br>一个类负责节点的IO操作;// 简称IoClass<br><br>这样基本可以了,再细分下去没有必要.<br><br>再来看第一个类,它是直接与一批业务代码打交道的,<br>首先要求速度要快,如果把解析出来的Dom放在类里,一则CrudClass做了IoClass做的事,二再速度上也上不去,所以这里我把dom里面的节点对应成了一个链表,一个值和一个Map,业务代码实际处理的就是这三个东西,他们不关心也不必要知道是否存储到了文件里,而且速度上得到了充分保证.<br>其次各个业务代码处理的是同一事务,这里再把CrudClass做成单例(Singleton)形式的,做成全静态也可以,但这种做法不太上台面.<br><br>IoClass是CrudClass的持久化操作,他们之间实际是仓库管理员和物流调度间的关系,这种关系有以下三种实现方式:<br>1.在他们间<strong>实现观察者模式</strong>,由IoClass来观察CrudClass,变化后写入文件.初看这种方式很好的完成了解偶,实际上IoClass还是需要知道CrudClass的细节,否则无法更新,而且创建IoClass的过程比较麻烦,客观世界可没有这样的处理.所以说观察者处理当抛弃.<br>2.<strong>将IoClass作为CrudClass的成员</strong>,这种方式避免了IoClass创建的不必要的复杂过程,而且CrudClass知道IoClass的处理接口就行了,IoClass无需知道CrudClass的任何部分,实现了有效解偶,其三符合现实世界,IoClass确实应该是CrudClass的下级,只接受CrudClass指派的任务而外界无须知道IoClass,完全不必知道.<br>3.<strong>将IoClass独立处理出来,与CrudClass等做成JMS异步通信方式或WebService通信方式</strong>,这个想法更OO,但是成本比较高,复杂度大,在大型系统可以考虑实现这种方案.<br><br>综合上面的意见,选择方案2是最适合的.<br><br>至此对一个XML文件进行CRUD操作的系统设计完成,再适当剥离一些通用代码形成实用类就差不多了,这里不再赘述.<br><br>还是那句老话,<strong>道法自然</strong>.程序实现可以有N种实现方式,我们应该选择最符合自然的一种.<br>
<img src ="http://www.blogjava.net/sitinspring/aggbug/121640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sitinspring/" target="_blank">如坐春风</a> 2007-06-03 16:15 <a href="http://www.blogjava.net/sitinspring/archive/2007/06/03/121640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>