﻿<?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-程序人生-随笔分类-JAVA</title><link>http://www.blogjava.net/zhenjiawang/category/3521.html</link><description>Someone once said if you want something very badly，set it free.If it's come back to you，it's your forever.If it doesn't， you never used begin with.</description><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 02:46:29 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 02:46:29 GMT</pubDate><ttl>60</ttl><item><title>体现JAVA接口 和工厂模式 抽象类的例子</title><link>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13793.html</link><dc:creator>射手座的我 处女座的她</dc:creator><author>射手座的我 处女座的她</author><pubDate>Thu, 22 Sep 2005 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13793.html</guid><wfw:comment>http://www.blogjava.net/zhenjiawang/comments/13793.html</wfw:comment><comments>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhenjiawang/comments/commentRss/13793.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhenjiawang/services/trackbacks/13793.html</trackback:ping><description><![CDATA[<P>接口 Interface<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>没有方法体,只有抽象方法,&nbsp;implements接口时候必须实现该接口所定义的所有的抽象方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;可以implements多个接口 用,号间隔.<BR></FONT>抽象类&nbsp; Abstract<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>可以有一部份实现方法,也可以有抽象方法,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只可以extends一个抽象类<BR></FONT><BR><FONT color=#ff0000>二者都是不可实例化<BR><BR><BR></FONT><FONT color=#000000>假设我们需要做一个支持多种数据库的项目,但是数据库之间有存在的差别,难道我们就要为不同的数据库开发不同的系统?答案是NO!<BR><FONT color=#ff0000>我们可以将多种数据库所有的方法抽象出来,写成一个个的方法组合到一个接口中<BR>然后有多少种数据库我们就写几个这样的类实现这个接口</FONT><BR>具体如下:<BR>我们首先把所有的抽象方法组合到一个DataOperate的接口中<BR>public interface DataOperate{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection createConn();&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#008000>/*建立连接*/<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void closeConn();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000> /*关闭连接*/<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet getRs();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#008000>/*返回结果集*/<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp; exec();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000> /*执行语句*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#000000>boolean&nbsp;&nbsp; isClose();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT><FONT color=#008000> /*公共方法 查看连接状态*/<BR></FONT>}<BR><BR>定义完接口 我们再创建一个抽象类 来实现公共的方法isClose()<BR>public abstract class AbstractDataOperate implements DataOperate{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Connection createConn(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return null;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; public void closeConn(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public ResultSet getRs(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public boolean exec(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fasle;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000> /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; *公共方法的实现<BR>&nbsp;&nbsp;&nbsp;&nbsp; **/</FONT><BR><FONT color=#ff0000>&nbsp;&nbsp;&nbsp;&nbsp; public boolean isClose(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(conn!=null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR></FONT>&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>接下来我们分别写3个类OracleDataOperate,SqlServerDataOperate,MySqlDataOperate继承AbstractDatOperate具体实现方法 这里不再叙述<BR><BR>好了 现在最后一步 写一个工厂方法来统一得到数据库操作类的实例<BR>public class DataOperateFactory{<BR>&nbsp;&nbsp;&nbsp;&nbsp; public static final int OracleKey=1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static final int SqlServerKey=2;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; public static final int MySqlKey=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; public static int DbType =OracleKey;<BR>&nbsp;&nbsp;&nbsp;&nbsp; private static DataOperate db;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; public static DataOperate getInstance(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(db==null){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DbType==OracleKey)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db=new OracleDataOperate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(DbType==SqlServerKey)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db=new SqlServerDataOperate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(DbType==MySqlKey)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db=new MySqlDataOperate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return db;<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>Ok 到此所有工作都完成 来测试吧<BR>public class&nbsp; MyTest{<BR>&nbsp; public static void main(String args[]){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>DataOperate db=AbstrctDataOperate.getInstance();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.createConn();</FONT><BR>&nbsp;&nbsp;&nbsp;}<BR>}<BR><BR><BR>在MyTest类里根本没有出现OracelDataOperate、MysqlDataOperate等的影子，这就是接口的威力。客户端不必针对OracelDataOperate等写不同的代码，它只关心DataOperate即可，具体要取那个类的逻辑就由DataOperateFactory负责了。 <BR>如果还有新的数据库添加的话 只需要象OracleaDataOperate那样 再写一个这样类 继承AbstractDataOperate类 然后在工厂类里DataOperateFactory加上相应的代码即可</FONT></P><img src ="http://www.blogjava.net/zhenjiawang/aggbug/13793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhenjiawang/" target="_blank">射手座的我 处女座的她</a> 2005-09-22 23:12 <a href="http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用数据库 连接JDBC的方法(转)</title><link>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13725.html</link><dc:creator>射手座的我 处女座的她</dc:creator><author>射手座的我 处女座的她</author><pubDate>Thu, 22 Sep 2005 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13725.html</guid><wfw:comment>http://www.blogjava.net/zhenjiawang/comments/13725.html</wfw:comment><comments>http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13725.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhenjiawang/comments/commentRss/13725.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhenjiawang/services/trackbacks/13725.html</trackback:ping><description><![CDATA[<TABLE class=tableborder cellSpacing=INNERBORDERWIDTH cellPadding=4 width="99%" align=center>
<TBODY>
<TR>
<TD bgColor=#f8f9fc>
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD class=bold></TD>
<TD align=right></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD class=smalltxt bgColor=#ffffff><SPAN><SPAN class=javascript id=text8044>1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar <BR>Class.forName( "org.gjt.mm.mysql.Driver" ); <BR>cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd ); <BR><BR>2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar <BR>Class.forName( "org.postgresql.Driver" ); <BR>cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd ); <BR><BR>3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip <BR>Class.forName( "oracle.jdbc.driver.OracleDriver" ); <BR>cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ); <BR><BR>4. Sybase(http://jtds.sourceforge.net)jconn2.jar <BR>Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" ); <BR>cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd ); <BR>//(Default-Username/Password: "dba"/"sql") <BR><BR>5. Microsoft SQLServer(http://jtds.sourceforge.net) <BR>Class.forName( "net.sourceforge.jtds.jdbc.Driver" ); <BR>cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd ); <BR><BR>6. Microsoft SQLServer(http://www.microsoft.com) <BR>Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" ); <BR>cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd ); <BR><BR>7. ODBC <BR>Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); <BR>Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd ); <BR><BR>8.DB2 <BR>Class.forName("Com.ibm.db2.jdbc.net.DB2Driver"); <BR>String url="jdbc:db2://192.9.200.108:6789/SAMPLE" <BR>cn = DriverManager.getConnection( url, sUsr, sPwd ); </SPAN></SPAN></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/zhenjiawang/aggbug/13725.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhenjiawang/" target="_blank">射手座的我 处女座的她</a> 2005-09-22 11:32 <a href="http://www.blogjava.net/zhenjiawang/archive/2005/09/22/13725.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>