Home Education and learning Web hosting and design Small Business
Abstract Factory design Patterns design Patterns
Abstract factory pattern encapsulates the similar factories. It is one level of abstraction above factory pattern. Using this design pattern a is not dependent on how the instances are created, composed and represented.
Class diagram
Sample Code:




/** File name: AbstractDbComponentFactory.java **/


package abstractfactorypattern;

public abstract class AbstractDbComponentFactory {

    public static AbstractDbComponentFactory createDbComponentFactory(String factoryname)    {
        
        if (factoryname == "ORACLE")  {
            return new OracleDbComponentFactory();
        }
        else if (factoryname == "MYSQL")  {
            return new MysqlDbComponentFactory();
        }
        return null ;
    }
    
     public abstract AbstractDbComponent createDbComponent();

}




/** File name: AbstractDbComponent.java **/

package abstractfactorypattern;

public abstract class AbstractDbComponent {
    public abstract void execute();


}





/** File name: MysqlDbComponentFactory.java **/

package abstractfactorypattern;

public class MysqlDbComponentFactory extends AbstractDbComponentFactory {
    
    public AbstractDbComponent createDbComponent() {
        return new MysqlDbComponent() ;
    }
    
}






/** File name: OracleDbComponentFactory.java **/

package abstractfactorypattern;

public class OracleDbComponentFactory extends AbstractDbComponentFactory {
    
    public AbstractDbComponent createDbComponent() {
        return new OracleDbComponent() ;
    }
}






/** File name: MysqlDbComponent.java **/

package abstractfactorypattern;

public class MysqlDbComponent extends AbstractDbComponent {
    public MysqlDbComponent() {
        System.out.println("Creating MYSQL DB Component");
    }
    
    public void execute() {
        System.out.println("MYSQL:  Executing using MysqlDbComponent") ;
    }
}





/** File name: OracleDbComponent.java **/

package abstractfactorypattern;

public class OracleDbComponent extends AbstractDbComponent {

    public OracleDbComponent() {
        System.out.println("Creating ORACLE DB Component");
    }
    
    public void execute() {
        System.out.println("ORACLE:   Executing using OracleDbComponent") ;
    }
}





/** File name: Main.java **/

package abstractfactorypattern;

public class Main {

    public Main() {
    }

    public static void main(String[] args) {
        
        System.out.println("TEST for oracle component");
        AbstractDbComponentFactory dbcomponentfactory = 
                AbstractDbComponentFactory.createDbComponentFactory("ORACLE");
        AbstractDbComponent dbcomponent = dbcomponentfactory.createDbComponent();
        dbcomponent.execute();
        
        
        System.out.println("\n\n\nTEST for Mysql component");
        dbcomponentfactory = 
                  AbstractDbComponentFactory.createDbComponentFactory("MYSQL");
        dbcomponent = dbcomponentfactory.createDbComponent();
        dbcomponent.execute();
    }
}





Following output is generated:

TEST for oracle component Creating ORACLE DB Component ORACLE: Executing using OracleDbComponent

TEST for Mysql component Creating MYSQL DB Component MYSQL: Executing using MysqlDbComponent

teacherone provides material for training only. We do not warrant the correctness of its contents. The risk from using it lies entirely with the user. teacherone is not liable for any damage or loss.