免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 929 | 回复: 0
打印 上一主题 下一主题

工厂模式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-13 21:30 |只看该作者 |倒序浏览
毕设,其中用到了工厂模式。我个人认为我是在不知不觉中用到了它。虽然不太能完全搞懂它,有点抽象。呵呵,个人感觉就是我不知道要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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP