工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较
以常用多种数据库访问层DAO为例, 三种模式代码分别为:
[color=red][b]Simple Factory(简单工厂模式)[/b][/color]
Simple Factory -- IDAO接口
Simple Factory -- Db2DAO
Simple Factory -- OracleDAO
Simple Factory -- Factory工厂类
Simple Factory -- 测试类
[color=red][b]Factory Method(工厂方法模式)[/b][/color]
Factory Method -- IDAO接口
Factory Method -- Db2DAO
Factory Method -- OracleDAO
Factory Method -- Factory抽象工厂类
Factory Method -- Db2Factory
Factory Method -- OracleFactory
Factory Method -- 测试类
[color=red][b]Abstract Factory(抽象工厂模式)[/b][/color]
Abstract Factory -- IDAO接口
Abstract Factory -- IUserDAO
Abstract Factory -- Db2UserDAO
Abstract Factory -- OracleUserDAO
Abstract Factory -- IAdminDAO
Abstract Factory -- Db2AdminDAO
Abstract Factory -- OracleAdminDAO
Abstract Factory -- AbstractFactory抽象工厂
Abstract Factory -- Db2Factory
Abstract Factory -- OracleFactory
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();
}
}
未完待续......