工場モードのSimple Factory、Factory Method及びAbstractoryの3つのモードの比較
工場モードのSimple Factory、Factory Method及びAbstractoryの3つのモードの比較
頻繁に使用される複数のデータベースアクセス層DAOを例にとって、3つのモードコードはそれぞれ以下の通りである。
Simple Factory(簡易工場モード)
Simple Factory--IDAOインターフェース
Factory Method--IDAOインターフェース
Abstractory--IDAOインターフェース
頻繁に使用される複数のデータベースアクセス層DAOを例にとって、3つのモードコードはそれぞれ以下の通りである。
Simple Factory(簡易工場モード)
Simple Factory--IDAOインターフェース
package com.dzeay.pattern.simple_factory;
public interface IDAO {
public void execute();
}
Simple Factory--Db 2 DAO
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:[email protected]">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();
}
}
Factory Method(工場法モデル)Factory Method--IDAOインターフェース
package com.dzeay.pattern.factory_method;
public interface IDAO {
public void execute();
}
Factory Method--Db 2 DAO
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--Db 2 Factory
package com.dzeay.pattern.factory_method;
public class Db2Factory extends Factory {
@Override
public IDAO createDAO() {
return new Db2DAO();
}
}
Factory Method--Oracle Factory
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:[email protected]">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();
}
}
Abstractory(抽象工場モード)Abstractory--IDAOインターフェース
package com.dzeay.pattern.abstract_factory;
public interface IDAO {
public void insert();
}
Abstractory--IUserDAO
package com.dzeay.pattern.abstract_factory;
public interface IUserDAO extends IDAO {
}
Abstractory--Db 2 UserDAO
package com.dzeay.pattern.abstract_factory;
public class Db2UserDAO implements IUserDAO {
@Override
public void insert() {
System.out.println("Db2UserDAO.insert");
}
}
Abstractory--OracleUserDAO
package com.dzeay.pattern.abstract_factory;
public class OracleUserDAO implements IUserDAO {
@Override
public void insert() {
System.out.println("OracleUserDAO.insert");
}
}
Abstractory--IAdminDAO
package com.dzeay.pattern.abstract_factory;
public interface IAdminDAO extends IDAO {
}
Abstractory--Db 2 AdminDAO
package com.dzeay.pattern.abstract_factory;
public class Db2AdminDAO implements IAdminDAO {
@Override
public void insert() {
System.out.println("Db2AdminDAO.insert");
}
}
Abstractory--OracleAdminDAO
package com.dzeay.pattern.abstract_factory;
public class OracleAdminDAO implements IAdminDAO {
@Override
public void insert() {
System.out.println("OracleAdminDAO.insert");
}
}
Abstractory--AbstractFactory抽象工場
package com.dzeay.pattern.abstract_factory;
public abstract class AbstractFactory {
public abstract IUserDAO createUserDAO();
public abstract IAdminDAO createAdminDAO();
}
Abstractory--Db 2 Factory
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();
}
}
Abstractory--Oracle Factory
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:[email protected]">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();
}
}
次号に続く…