免费注册 查看新帖 |

Chinaunix

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

工厂模式:面向接口编程实现抽象工厂化DAO [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-17 17:07 |只看该作者 |倒序浏览
工厂模式:面向接口编程实现抽象工厂化DAO
例如:人员的增删改查Person
建立Person的POJO(Plain Old Java Object):
class PersonBO{}

建立Person的DAO接口:
interface PersonDAO{增删改查}

建立Person的abstract class PersonDAOFactory:
abstract class PersonDAOFactory{
static PersonDAOFactory getInstance()
{
读取数据库文件*.properties的dbname,jndi,transactionIsolation;
return (PersonDAOFactory)PersonOracleDAOFactory的实例;(符合properties文件)
}
public abstract PersonDAO getPersonDAO();
}

建立Person的OracleDAO:
class PersonOracleDAO implements PersonDAO{增删改查实现}

建立Person的OracleDAOFactory:
class PersonOracleDAOFactory extends PersonDAOFactory
{
      PersonDAO getPersonDAO()
      {
      return new PersonOracleDAO();
      }
}
关系(图3.1.4):
  
PersonOracleDAO(class)
PersonDAOFactory(abstract class)
PersonDAO(interface)
PersonOracleDAOFactory(class)
interface PersonDAO              PersonDAOFactory
        |                               |
        |                               |
        |                               |
        |                               |
class PersonOracleDAO
图3.1.4 面向接口编程实现抽象工厂化DAO

工厂模式:提供创建对象的接口,所谓工厂模式就是将对象的new过程分离出来,满足当同一个产品后来修改的需要,不会影响到其他产品。
       例子:
Sample mysample=new MySample();
Sample hissample=new HisSample();
其中Sample是MySample与HisSample的接口。
工厂方法:隐藏实现的细节。
例子:
public class Factory{

  public static Sample creator(int which){
         //getClass 产生Sample 一般可使用动态类装载装入类。

  if (which==1)
    return new SampleA();
  else if (which==2)
    return new SampleB();
  }
}

如果要实例化Sample时.就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会。
抽象工厂:将Factory变成抽象类,满足工厂定制不同品种的需要(产品多样化、复杂化)。
       例子:
public abstract class Factory{
  public abstract Sample creator();
  public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
  public Sample creator(){
    .........
    return new SampleA
  }
  public Sample2 creator(String name){
    .........
    return new Sample2A
  }
}
public class BombFactory extends Factory{
  public Sample creator(){
    ......
    return new SampleB
  }
  public Sample2 creator(String name){
    ......
    return new Sample2B
  }
}
这样做的好处:
1)        通过工厂模式PersonOracleDAOFactory对PersonDAO进行定制,以适应数据库需求的变化(ORACLE和DB2),而且不同的数据库类型的DAO是不一样的。这里主要被体现在抽象工厂模式。正应了那句话:传统编码过程中,引入一个接口,往往也意味着同时要引入一个Factory类,也许还有一个额外的配置文件及其读写代码。
2)        面向接口编程,PersonDAO(interface)是PersonOracleDAO(class)的接口,接口PersonDAO定制了该DAO的功能,接口中规范了所有的功能方法,给调用着标明了自己的功能列表,是模块间实现低耦合的重要方式。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25102/showart_323089.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP