- 论坛徽章:
- 0
|
毕设,其中用到了工厂模式。我个人认为我是在不知不觉中用到了它。虽然不太能完全搞懂它,有点抽象。呵呵,个人感觉就是我不知道要new 的具体对象时,可以使用。
假设我有很多个类,分别是Mysql.java、SQLServer.java、Oracle.java、DB2.java,他们分别连接不同的数
据库,统一返回一个Connection对象,并且都有一个close方法,用于关闭连接。只需要针对你的DBMS,选择不同的类,就可以用了,但是我的
用户他会使用什么数据库?我不知道,我希望的是尽量少的修改代码,就能满足他的需要。我可以抽象如下接口:
package org.vk.db;
public interface DB
{
Connection openDB(String url,String user,String password);
void close();
}
这个接口只定义两个方法,没有任何有实际意义的代码,具体的代码由实作这个接口的类来给出,比如Mysql.java:
Package org.vk.db;
import java.sql.*;
public class Mysql implements DB
{
private String url=”jdbc:mysql:localhost:3306/test”;
private String user=”root”;
private String password=””;
private Connection conn;
public Connection openDB(url,user,password)
{
//连接数据库的代码
}
public void close()
{
//关闭数据库
}
}
类似的当然还有Oracle.java等等,接口DB给这些类归了个类,在应用程序中我们这样定义对象: DB myDB;
这是一个应用。
下面是一个基类它主要有一个抽象方法render,和一个重载addBorder方法
public abstract class BasePortletClass {
abstract public String render(UserEO user ,PortletEO portlet);
public String addBorder(UserEO user ,PortletEO portlet, String insidecontent,boolean center) {
String portletDispName = portlet.getDisplayName();
StringBuffer content = new StringBuffer();
content.append("");
content.append("");
content.append("");
content.append(" "
+ portletDispName + "");
content.append(" ");
content.append("");
content.append("");
content.append(" ");
content.append(" ");
content.append(" ");
if (center)
content.append("");
else
content.append("");
content.append("");
content.append(insidecontent);
content.append("");
content.append("");
content.append("");
content.append("");
return content.toString();
}
public String addBorder(String insidecontent ,PortletEO portlet) {
StringBuffer content = new StringBuffer();
content.append("");
content.append("");
content.append("");
content.append(insidecontent);
content.append("");
content.append("");
content.append("");
return content.toString();
}
protected String side = "left";
public void setSide( String s) {
side = s;
}
}
这是它的具体的一个类了
public class SinaNews extends BasePortletClass{
public String render(UserEO user, PortletEO portlet) {
StringBuffer buf=new StringBuffer();
try {
URL url = new URL( Util.SINA_RSS );//创建一个URL对象
ChannelIF channel = FeedParser.parse( new ChannelBuilder(), url );
Collection items = channel.getItems();
buf.append("");
for( Iterator i=items.iterator(); i.hasNext(); )
{
ItemIF item = ( ItemIF )i.next();
buf.append("["+item.getDate().toLocaleString()+"] "+item.getTitle()+"");
}
buf.append("");
} catch (Exception e) {
e.printStackTrace();
}
return addBorder( user ,portlet ,buf.toString(),false);
}
}
大家可以看到基类主要实现的 content.append(div);
就可以知道它主要实现是一个div小区域用来动态添加内容。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19492/showart_320686.html |
|