工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较

工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较

以常用多种数据库访问层DAO为例, 三种模式代码分别为:

[color=red][b]Simple Factory(简单工厂模式)[/b][/color]

Simple Factory -- IDAO接口

package com.dzeay.pattern.simple_factory;

public interface IDAO {
public void execute();
}


Simple Factory -- Db2DAO

package com.dzeay.pattern.simple_factory;

public class Db2DAO implements IDAO {
@Override
public void execute() {
System.out.println("Db2DAO.execute");
}
}


Simple Factory -- OracleDAO

package com.dzeay.pattern.simple_factory;

public class OracleDAO implements IDAO {
@Override
public void execute() {
System.out.println("OracleDAO.execute");
}
}


Simple Factory -- Factory工厂类

package com.dzeay.pattern.simple_factory;

public class Factory {
public static IDAO createDAO(String type) {
if ("oracle".equals(type))
return new OracleDAO();

if ("db2".equals(type))
return new Db2DAO();

return null;
}
}


Simple Factory -- 测试类

package com.dzeay.pattern.simple_factory;

/**
* <pre>
* Simple Factory(简单工厂模式)详解:
*
* </pre>
*
* @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
* @since 2011-01-22
* @version 1.0
*/
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
IDAO dao = Factory.createDAO("oracle");
dao.execute();
}
}



[color=red][b]Factory Method(工厂方法模式)[/b][/color]

Factory Method -- IDAO接口

package com.dzeay.pattern.factory_method;

public interface IDAO {
public void execute();
}


Factory Method -- Db2DAO

package com.dzeay.pattern.factory_method;

public class Db2DAO implements IDAO {
@Override
public void execute() {
System.out.println("Db2DAO.execute");
}
}


Factory Method -- OracleDAO

package com.dzeay.pattern.factory_method;

public class OracleDAO implements IDAO {
@Override
public void execute() {
System.out.println("OracleDAO.execute");
}
}


Factory Method -- Factory抽象工厂类

package com.dzeay.pattern.factory_method;

public abstract class Factory {
public abstract IDAO createDAO();
}



Factory Method -- Db2Factory

package com.dzeay.pattern.factory_method;

public class Db2Factory extends Factory {
@Override
public IDAO createDAO() {
return new Db2DAO();
}
}


Factory Method -- OracleFactory

package com.dzeay.pattern.factory_method;

public class OracleFactory extends Factory {
@Override
public IDAO createDAO() {
return new OracleDAO();
}
}


Factory Method -- 测试类

package com.dzeay.pattern.factory_method;

/**
* <pre>
* Factory Method(工厂方法模式)详解:
* 每个工厂完成一个产品的创建
* </pre>
*
* @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
* @since 2011-01-22
* @version 1.0
*/
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
Factory factory = new OracleFactory();
IDAO dao = factory.createDAO();
dao.execute();
}
}



[color=red][b]Abstract Factory(抽象工厂模式)[/b][/color]

Abstract Factory -- IDAO接口

package com.dzeay.pattern.abstract_factory;

public interface IDAO {
public void insert();
}


Abstract Factory -- IUserDAO

package com.dzeay.pattern.abstract_factory;

public interface IUserDAO extends IDAO {

}


Abstract Factory -- Db2UserDAO

package com.dzeay.pattern.abstract_factory;


public class Db2UserDAO implements IUserDAO {
@Override
public void insert() {
System.out.println("Db2UserDAO.insert");
}
}


Abstract Factory -- OracleUserDAO

package com.dzeay.pattern.abstract_factory;


public class OracleUserDAO implements IUserDAO {
@Override
public void insert() {
System.out.println("OracleUserDAO.insert");
}
}


Abstract Factory -- IAdminDAO

package com.dzeay.pattern.abstract_factory;

public interface IAdminDAO extends IDAO {

}


Abstract Factory -- Db2AdminDAO

package com.dzeay.pattern.abstract_factory;


public class Db2AdminDAO implements IAdminDAO {
@Override
public void insert() {
System.out.println("Db2AdminDAO.insert");
}
}


Abstract Factory -- OracleAdminDAO

package com.dzeay.pattern.abstract_factory;


public class OracleAdminDAO implements IAdminDAO {
@Override
public void insert() {
System.out.println("OracleAdminDAO.insert");
}
}


Abstract Factory -- AbstractFactory抽象工厂

package com.dzeay.pattern.abstract_factory;

public abstract class AbstractFactory {
public abstract IUserDAO createUserDAO();

public abstract IAdminDAO createAdminDAO();
}


Abstract Factory -- Db2Factory

package com.dzeay.pattern.abstract_factory;


public class Db2Factory extends AbstractFactory {
@Override
public IUserDAO createUserDAO() {
return new Db2UserDAO();
}

@Override
public IAdminDAO createAdminDAO() {
return new Db2AdminDAO();
}
}


Abstract Factory -- OracleFactory

package com.dzeay.pattern.abstract_factory;


public class OracleFactory extends AbstractFactory {
@Override
public IUserDAO createUserDAO() {
return new OracleUserDAO();
}

@Override
public IAdminDAO createAdminDAO() {
return new OracleAdminDAO();
}
}


Abstract Factory -- 测试类

package com.dzeay.pattern.abstract_factory;

/**
* <pre>
* Abstract Factory(抽象工厂模式)详解:
* 每个工厂完成一系列产品的创建
* </pre>
*
* @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
* @since 2011-01-22
* @version 1.0
*/
public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
AbstractFactory factory = new OracleFactory();

IUserDAO userDAO = factory.createUserDAO();
IAdminDAO adminDAO = factory.createAdminDAO();
userDAO.insert();
adminDAO.insert();

factory = new Db2Factory();
userDAO = factory.createUserDAO();
adminDAO = factory.createAdminDAO();
userDAO.insert();
adminDAO.insert();
}
}


未完待续......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值