﻿<?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-Focus on java, CSS and beyond-文章分类-java 基础</title><link>http://www.blogjava.net/kelven/category/41753.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 20 Sep 2009 17:30:51 GMT</lastBuildDate><pubDate>Sun, 20 Sep 2009 17:30:51 GMT</pubDate><ttl>60</ttl><item><title>java之final（待修改）</title><link>http://www.blogjava.net/kelven/articles/295790.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Sun, 20 Sep 2009 16:38:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/295790.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/295790.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/295790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/295790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/295790.html</trackback:ping><description><![CDATA[以前final总容易记混，现在记在下面：<br />
<span id="zoom" class="a14c">final成员<br />
当你在类中定义变量时，在其前面加上final关键字，那便是说，这个变量一旦被初始化便不可改变，这里不可改变的意思对基本类型来说是其值不可变，而对于对象变量来说其引用不可再变。其初始化可以在两个地方，一是其定义处，二是在构造函数中，两者只能选其</span><br />
<br />
<span style="font-size: small;">所
谓不可变类，是指当创建了这个类的实例后，就不允许修改它的属性值。在JDK的基本类库中，所有基本类型的包装类，如Integer和Long类，都是不
可变类，java.lang.String也是不可变类。以下代码创建了一个String对象和Integer对象，它们的值分别为&#8220;Hello&#8221;和
10，在程序代码中无法再改变这两个对象的值，因为Integer和String类没有提供修改其属性值的接口。</span>
<p><span style="font-size: small;">String s=new String("Hello");</span>
</p>
<p><span style="font-size: small;">Integer i=new Integer(10);</span>
</p>
<br />
<br />
<img src ="http://www.blogjava.net/kelven/aggbug/295790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-09-21 00:38 <a href="http://www.blogjava.net/kelven/articles/295790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java之tips</title><link>http://www.blogjava.net/kelven/articles/295723.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Sat, 19 Sep 2009 18:50:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/295723.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/295723.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/295723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/295723.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/295723.html</trackback:ping><description><![CDATA[货币：System.out.println(NumberFormat.getCurrencyInstance().format(0.1));<br />
百分号：System.out.println(NumberFormat.getPercentInstance().format(0.1));
<img src ="http://www.blogjava.net/kelven/aggbug/295723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-09-20 02:50 <a href="http://www.blogjava.net/kelven/articles/295723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java之工厂模式</title><link>http://www.blogjava.net/kelven/articles/295722.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Sat, 19 Sep 2009 18:41:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/295722.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/295722.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/295722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/295722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/295722.html</trackback:ping><description><![CDATA[<h3 title=""><a href="http://13shu.javaeye.com/blog/200119">抽象工厂模式(java)</a></h3>
<strong>关键字: java 抽象工厂模式</strong>
<div>
<p>工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准.</p>
<p>以开发项目的DAO层为例,在项目中客户的需求是常常变动的,临时更换数据库的需求也是常常发生的,那我们要如何解决跨数据库的功能,这里就要使用到抽象工厂模式了.工厂模式常常用于创建多系列化的对象(如Orale系列,MySql系列)</p>
<p>1.首先定义相关接口(与平常的做法没什么区别)</p>
<div>
<div>
<div>Java代码 <embed src="http://13shu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%2F%2F%20%E8%A7%92%E8%89%B2%E8%A1%A8DAO%E6%8E%A5%E5%8F%A3%0Ainterface%20IroleDao%20%7B%0A%09void%20insert()%3B%0A%0A%09void%20update()%3B%0A%7D%0A%2F%2F%20%E7%94%A8%E6%88%B7%E8%A1%A8DAO%E6%8E%A5%E5%8F%A3%0Ainterface%20IuserDao%20%7B%0A%09void%20find()%3B%0A%0A%09void%20delete()%3B%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>//&nbsp;角色表DAO接口&nbsp;&nbsp;</li>
    <li>interface&nbsp;IroleDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;insert();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;update();&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>//&nbsp;用户表DAO接口&nbsp;&nbsp;</li>
    <li>interface&nbsp;IuserDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;find();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;delete();&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">// 角色表DAO接口
interface IroleDao {
void insert();
void update();
}
// 用户表DAO接口
interface IuserDao {
void find();
void delete();
}</pre>
<p>&nbsp;2.不同的数据库有不同的SQL语句所以实现时必须分数据库来实现</p>
<div>
<div>
<div>Java代码 <embed src="http://13shu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%2F%2F%20%E7%94%A8%E6%88%B7%E8%A1%A8Oralce%E6%95%B0%E6%8D%AE%E5%BA%93DAO%0Aclass%20OracleuserDao%20implements%20IuserDao%20%7B%0A%09public%20void%20delete()%20%7B%0A%09%09System.out.println(%22Oralce%20%E5%88%A0%E9%99%A4%E7%94%A8%E6%88%B7%E8%A1%A8%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%0A%09public%20void%20find()%20%7B%0A%09%09System.out.println(%22Oralce%20%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%E8%A1%A8%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%7D%0A%0A%2F%2F%20%E7%94%A8%E6%88%B7%E8%A1%A8MySql%E6%95%B0%E6%8D%AE%E5%BA%93DAO%0Aclass%20MySqluserDao%20implements%20IuserDao%20%7B%0A%09public%20void%20delete()%20%7B%0A%09%09System.out.println(%22MySql%20%E5%88%A0%E9%99%A4%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%0A%09public%20void%20find()%20%7B%0A%09%09System.out.println(%22MySql%20%E6%9F%A5%E8%AF%A2%E7%94%A8%E6%88%B7%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%7D%0A%2F%2F%20%E8%A7%92%E8%89%B2%E8%A1%A8Oracle%E6%95%B0%E6%8D%AE%E5%BA%93DAO%0Aclass%20OracleroleDao%20implements%20IroleDao%20%7B%0A%09public%20void%20insert()%20%7B%0A%09%09System.out.println(%22Oralce%20%E5%AF%B9%E8%A7%92%E8%89%B2%E8%A1%A8%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%0A%09public%20void%20update()%20%7B%0A%09%09System.out.println(%22Oracle%20%E5%AF%B9%E8%A7%92%E8%89%B2%E8%A1%A8%E6%9B%B4%E6%96%B0%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%7D%0A%0A%2F%2F%20%E8%A7%92%E8%89%B2%E8%A1%A8MySql%E6%95%B0%E6%8D%AE%E5%BA%93DAO%0Aclass%20MySqlroleDAO%20implements%20IroleDao%20%7B%0A%09public%20void%20insert()%20%7B%0A%09%09System.out.println(%22MySql%20%E5%AF%B9%E8%A7%92%E8%89%B2%E8%A1%A8%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%0A%09public%20void%20update()%20%7B%0A%09%09System.out.println(%22Mysql%20%E5%AF%B9%E8%A7%92%E8%89%B2%E8%A1%A8%E6%9B%B4%E6%96%B0%E6%95%B0%E6%8D%AE%22)%3B%0A%09%7D%0A%7D%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>//&nbsp;用户表Oralce数据库DAO&nbsp;&nbsp;</li>
    <li>class&nbsp;OracleuserDao&nbsp;implements&nbsp;IuserDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;delete()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Oralce&nbsp;删除用户表数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;find()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Oralce&nbsp;查询用户表数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;用户表MySql数据库DAO&nbsp;&nbsp;</li>
    <li>class&nbsp;MySqluserDao&nbsp;implements&nbsp;IuserDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;delete()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("MySql&nbsp;删除用户数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;find()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("MySql&nbsp;查询用户数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>//&nbsp;角色表Oracle数据库DAO&nbsp;&nbsp;</li>
    <li>class&nbsp;OracleroleDao&nbsp;implements&nbsp;IroleDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;insert()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Oralce&nbsp;对角色表插入数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;update()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Oracle&nbsp;对角色表更新数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;角色表MySql数据库DAO&nbsp;&nbsp;</li>
    <li>class&nbsp;MySqlroleDAO&nbsp;implements&nbsp;IroleDao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;insert()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("MySql&nbsp;对角色表插入数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;update()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Mysql&nbsp;对角色表更新数据");&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">// 用户表Oralce数据库DAO
class OracleuserDao implements IuserDao {
public void delete() {
System.out.println("Oralce 删除用户表数据");
}
public void find() {
System.out.println("Oralce 查询用户表数据");
}
}
// 用户表MySql数据库DAO
class MySqluserDao implements IuserDao {
public void delete() {
System.out.println("MySql 删除用户数据");
}
public void find() {
System.out.println("MySql 查询用户数据");
}
}
// 角色表Oracle数据库DAO
class OracleroleDao implements IroleDao {
public void insert() {
System.out.println("Oralce 对角色表插入数据");
}
public void update() {
System.out.println("Oracle 对角色表更新数据");
}
}
// 角色表MySql数据库DAO
class MySqlroleDAO implements IroleDao {
public void insert() {
System.out.println("MySql 对角色表插入数据");
}
public void update() {
System.out.println("Mysql 对角色表更新数据");
}
}
</pre>
<p>这里增加了一套DAO的实现&nbsp;(与平时有所不同,如果有10个数据库就要加上10种不同的实现,比较麻烦呀<img src="http://13shu.javaeye.com/images/smiles/icon_cry.gif" alt="" />)</p>
<p>3.定义DAO工厂接口与实现(利用java反射机制生产出你需要的DAO如:userDAO,roleDao)</p>
<div>
<div>
<div>Java代码 <embed src="http://13shu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%2F%2F%20DAO%E5%B7%A5%E5%8E%82%0Aabstract%20class%20DaoFactory%20%7B%0A%09public%20static%20DaoFactory%20getInstance(String%20classname)%20%7B%0A%09%09DaoFactory%20dao%20%3D%20null%3B%0A%09%09try%20%7B%0A%09%09%09dao%20%3D%20(DaoFactory)%20Class.forName(classname).newInstance()%3B%0A%09%09%7D%20catch%20(Exception%20e)%20%7B%0A%09%09%09e.printStackTrace()%3B%0A%09%09%7D%0A%09%09return%20dao%3B%0A%09%7D%0A%0A%09abstract%20IuserDao%20getuserdao()%3B%0A%0A%09abstract%20IroleDao%20getroledao()%3B%0A%7D%0A%0A%2F%2F%20Oralce%E5%B7%A5%E5%8E%82%0Aclass%20OracleFactory%20extends%20DaoFactory%20%7B%0A%09public%20IroleDao%20getroledao()%20%7B%0A%09%09return%20new%20OracleroleDao()%3B%0A%09%7D%0A%09public%20IuserDao%20getuserdao()%20%7B%0A%09%09return%20new%20OracleuserDao()%3B%0A%09%7D%0A%7D%0A%0A%2F%2F%20MySql%E5%B7%A5%E5%8E%82%0Aclass%20MysqlFactory%20extends%20DaoFactory%20%7B%0A%09public%20IroleDao%20getroledao()%20%7B%0A%09%09return%20new%20MySqlroleDAO()%3B%0A%09%7D%0A%09public%20IuserDao%20getuserdao()%20%7B%0A%09%09return%20new%20MySqluserDao()%3B%0A%09%7D%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>//&nbsp;DAO工厂&nbsp;&nbsp;</li>
    <li>abstract&nbsp;class&nbsp;DaoFactory&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;DaoFactory&nbsp;getInstance(String&nbsp;classname)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DaoFactory&nbsp;dao&nbsp;=&nbsp;null;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dao&nbsp;=&nbsp;(DaoFactory)&nbsp;Class.forName(classname).newInstance();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dao;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;abstract&nbsp;IuserDao&nbsp;getuserdao();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;abstract&nbsp;IroleDao&nbsp;getroledao();&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;Oralce工厂&nbsp;&nbsp;</li>
    <li>class&nbsp;OracleFactory&nbsp;extends&nbsp;DaoFactory&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IroleDao&nbsp;getroledao()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;OracleroleDao();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IuserDao&nbsp;getuserdao()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;OracleuserDao();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>//&nbsp;MySql工厂&nbsp;&nbsp;</li>
    <li>class&nbsp;MysqlFactory&nbsp;extends&nbsp;DaoFactory&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IroleDao&nbsp;getroledao()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MySqlroleDAO();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;IuserDao&nbsp;getuserdao()&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;MySqluserDao();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">// DAO工厂
abstract class DaoFactory {
public static DaoFactory getInstance(String classname) {
DaoFactory dao = null;
try {
dao = (DaoFactory) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return dao;
}
abstract IuserDao getuserdao();
abstract IroleDao getroledao();
}
// Oralce工厂
class OracleFactory extends DaoFactory {
public IroleDao getroledao() {
return new OracleroleDao();
}
public IuserDao getuserdao() {
return new OracleuserDao();
}
}
// MySql工厂
class MysqlFactory extends DaoFactory {
public IroleDao getroledao() {
return new MySqlroleDAO();
}
public IuserDao getuserdao() {
return new MySqluserDao();
}
}</pre>
<p>4.&nbsp;定义配置文件</p>
<div>
<div>
<div>Java代码 <embed src="http://13shu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=class%20Config%20%7B%0A%09%2F%2F%20Oralce%0A%09static%20final%20String%20ORALCE%20%3D%20%22org.abc.OracleFactory%22%3B%0A%0A%09static%20final%20String%20MYSQL%20%3D%20%22org.abc.MysqlFactory%22%3B%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>class&nbsp;Config&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Oralce&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;ORALCE&nbsp;=&nbsp;"org.abc.OracleFactory";&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;MYSQL&nbsp;=&nbsp;"org.abc.MysqlFactory";&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">class Config {
// Oralce
static final String ORALCE = "org.abc.OracleFactory";
static final String MYSQL = "org.abc.MysqlFactory";
}</pre>
<p>&nbsp;配置文件可以定义到XML中去(好处:修改配置项之后不需要对JAVA文件进行编译.)</p>
<p>5.测试你的输出的DAO</p>
<div>
<div>
<div>Java代码 <embed src="http://13shu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=public%20class%20Dao%20%7B%0A%09public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%09%09DaoFactory.getInstance(Config.ORALCE).getroledao().insert()%3B%0A%09%09DaoFactory.getInstance(Config.MYSQL).getroledao().insert()%3B%0A%09%7D%0A%0A%7D" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15"></div>
</div>
<ol start="1">
    <li>public&nbsp;class&nbsp;Dao&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DaoFactory.getInstance(Config.ORALCE).getroledao().insert();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DaoFactory.getInstance(Config.MYSQL).getroledao().insert();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>}&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="java">public class Dao {
public static void main(String[] args) {
DaoFactory.getInstance(Config.ORALCE).getroledao().insert();
DaoFactory.getInstance(Config.MYSQL).getroledao().insert();
}
}</pre>
<p>总结</p>
<p>使用条件：一系列接口有一系列的实现<br />
如上IuserDao、IroleDao等一系列的接口，他们可以有一系列的实现(Oracle方式、MySql方式)</p>
<p>OracleuserDao、OracleroleDao、MySqluserDao、MySqlroleDAO<br />
组成元素(以上面例子)<br />
一系列接口：IuserDao、IroleDao<br />
一系列实现：Oracle系列、MySql系列<br />
系列工厂类：Oracle系列工厂类、MySql系列工厂类(必须继承抽象工厂类)<br />
抽象工厂类：DaoFactory</p>
</div>
<img src ="http://www.blogjava.net/kelven/aggbug/295722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-09-20 02:41 <a href="http://www.blogjava.net/kelven/articles/295722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java  之反射</title><link>http://www.blogjava.net/kelven/articles/295697.html</link><dc:creator>kelven.lee</dc:creator><author>kelven.lee</author><pubDate>Sat, 19 Sep 2009 15:30:00 GMT</pubDate><guid>http://www.blogjava.net/kelven/articles/295697.html</guid><wfw:comment>http://www.blogjava.net/kelven/comments/295697.html</wfw:comment><comments>http://www.blogjava.net/kelven/articles/295697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kelven/comments/commentRss/295697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kelven/services/trackbacks/295697.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java反射机制&nbsp;&nbsp;&nbsp; 注意：只能反射public，几种反射的方式。object中的class修改：getFields()获得某个类的所有的公共（public）的字段，包括父类。 getDeclaredFields()获得某个类的所有申明的字段，即包括public、private和proteced，但是不包括父类的申明字段。 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/kelven/articles/295697.html'>阅读全文</a><img src ="http://www.blogjava.net/kelven/aggbug/295697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kelven/" target="_blank">kelven.lee</a> 2009-09-19 23:30 <a href="http://www.blogjava.net/kelven/articles/295697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>