Java Dao工厂设计模式

2014-11-24 10:53:14 · 作者: · 浏览: 1

这里简要说明Java中的分层设计思想。如下图所示:

将功能的实现分在两层进行,访问层和业务层。

(1)设计IDao接口

[java]
package web.java.xml.model;

public interface IDao {
public void create();
}

package web.java.xml.model;

public interface IDao {
public void create();
}
(2)设计接口实现类DaoJdbc

[java]
package web.java.xml.model;

public class DaoJdbc implements IDao {

@Override
public void create() {
System.out.println("DaoJdbc::create()");
}

}

package web.java.xml.model;

public class DaoJdbc implements IDao {

@Override
public void create() {
System.out.println("DaoJdbc::create()");
}

}

(3)设计接口实现类DaoHibernate

[java]
package web.java.xml.model;

public class DaoHibernate implements IDao {

@Override
public void create() {
System.out.println("DaoHibernate::create()");
}

}

package web.java.xml.model;

public class DaoHibernate implements IDao {

@Override
public void create() {
System.out.println("DaoHibernate::create()");
}

}
(4)设计单例工厂

[java]
package web.java.xml.model;

/**
* 单例的Dao工厂:
* 单例模式的特点:
* (1)单例类只能有一个实例
* (2)单例类必须自己给自己创建一个唯一的实例
* (3)单例类必须给所有其他对象提供这一实例
*/
public class DaoFactory {
//1.私有化构造函数,不能让外界进行对象创建
private DaoFactory(){}

//2.这个类必须自动向整个系统提供这个实例对象
public static DaoFactory getDaoFactory(){
if(daoFactory==null){
daoFactory = new DaoFactory();
}
return daoFactory;
}

//3.单例类必须执行创建
private static DaoFactory daoFactory;

public IDao getDao(){
//项目总根据需求对这里的内容进行修改,决定工厂提供什么样的产品
return new DaoJdbc();
}
}

package web.java.xml.model;

/**
* 单例的Dao工厂:
* 单例模式的特点:
* (1)单例类只能有一个实例
* (2)单例类必须自己给自己创建一个唯一的实例
* (3)单例类必须给所有其他对象提供这一实例
*/
public class DaoFactory {
//1.私有化构造函数,不能让外界进行对象创建
private DaoFactory(){}

//2.这个类必须自动向整个系统提供这个实例对象
public static DaoFactory getDaoFactory(){
if(daoFactory==null){
daoFactory = new DaoFactory();
}
return daoFactory;
}

//3.单例类必须执行创建
private static DaoFactory daoFactory;

public IDao getDao(){
//项目总根据需求对这里的内容进行修改,决定工厂提供什么样的产品
return new DaoJdbc();
}
}

(5)设计业务层

[java]
package web.java.xml.model;

/**
* 业务层
*
*/
public class Service {
public void create(){
DaoFactory daoFactory = DaoFactory.getDaoFactory();
IDao iDao = daoFactory.getDao();
iDao.create();
}
}

package web.java.xml.model;

/**
* 业务层
*
*/
public class Service {
public void create(){
DaoFactory daoFactory = DaoFactory.getDaoFactory();
IDao iDao = daoFactory.getDao();
iDao.create();
}
}
业务层功能的实现,依赖于工厂向外提供产品。工厂的实现又依赖于下面数据访问层代码。使用分层设计思想,有助于代码的细化,便于后期的更新与维护。

(6)编写测试函数

[java]
package web.java.xml.model;

public class Demo1 {
public static void main(String[] args) {
Service ser = new Service();
ser.create();
}
}

package web.java.xml.model;

public class Demo1 {
public static void main(String[] args) {
Service ser = new Service();
ser.create();
}
}
显然,这里想要什么产品的话,只需要在工厂中修改相应的代码即可。