工場モードのSimple Factory、Factory Method及びAbstractoryの3つのモードの比較


工場モードのSimple Factory、Factory Method及びAbstractoryの3つのモードの比較
頻繁に使用される複数のデータベースアクセス層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();
    }
}
次号に続く…