Skip to main content

Abstract Factory Design Pattern ex Recharge


package com.freerecharge.agents;

public interface DTHRechargeAgent {
            float recharge(String acountNo, String pkg, float amount);
}


-----------------------------
: package com.freerecharge.agents;

public interface MobileRechargeAgent {
            boolean recharge(String mobileNo, String pkg, float amount);
}


package com.freerecharge.agent.factory;

import com.freerecharge.agents.DTHRechargeAgent;
import com.freerecharge.agents.MobileRechargeAgent;

public abstract class AbstactAgentFactory {
            // factory method for MobileRechargeAgent component interface
            public MobileRechargeAgent newMobileRechargeAgent() {
                        MobileRechargeAgent mobileRechargeAgent = null;
                        mobileRechargeAgent = createMobileRechargeAgent();
                        // any standard instantiation process
                        return mobileRechargeAgent;
            }

            // factory method for DTHRechargeAgent component interface
            public DTHRechargeAgent newDTHRechargeAgent() {
                        DTHRechargeAgent dthRechargeAgent = null;
                        dthRechargeAgent = createDTHRechargeAgent();
                        return dthRechargeAgent;
            }

            protected abstract MobileRechargeAgent createMobileRechargeAgent();

            protected abstract DTHRechargeAgent createDTHRechargeAgent();
}

------------------------------------------------------------------------------
package com.freerecharge.airtel.agent;

import com.freerecharge.agents.DTHRechargeAgent;

public class AirtelDTHRechargeAgent implements DTHRechargeAgent {

            @Override
            public float recharge(String acountNo, String pkg, float amount) {
                        System.out.println("AirTel DTH Recharge for account no:" + acountNo + " with package " + pkg + " amount: " + amount);
                        return amount;
            }

}
---------------------------------------------
package com.freerecharge.airtel.agent;

import com.freerecharge.agents.MobileRechargeAgent;

public class AirtelMobileRechargeAgent implements MobileRechargeAgent {

            @Override
            public boolean recharge(String mobileNo, String pkg, float amount) {
                        System.out.println("Recharge AirTel mobileNo:" + mobileNo + " with amount: " + amount);
                        return true;
            }

}


package com.freerecharge.airtel.agent.factory;

import com.freerecharge.agent.factory.AbstactAgentFactory;
import com.freerecharge.agents.DTHRechargeAgent;
import com.freerecharge.agents.MobileRechargeAgent;
import com.freerecharge.airtel.agent.AirtelDTHRechargeAgent;
import com.freerecharge.airtel.agent.AirtelMobileRechargeAgent;

public class AirtelAgentFactory extends AbstactAgentFactory {

            @Override
            protected MobileRechargeAgent createMobileRechargeAgent() {
                        return new AirtelMobileRechargeAgent();
            }

            @Override
            protected DTHRechargeAgent createDTHRechargeAgent() {
                        return new AirtelDTHRechargeAgent();
            }

}



package com.freerecharge.vodafone.agent;

import com.freerecharge.agents.DTHRechargeAgent;

public class VodafoneDTHRechargeAgent implements DTHRechargeAgent {

            @Override
            public float recharge(String acountNo, String pkg, float amount) {
                        System.out.println(
                                                "Vodafone DTH Recharge for account no:" + acountNo + " with package " + pkg + " amount: " + amount);
                        return amount;
            }

}
package com.freerecharge.vodafone.agent;

import com.freerecharge.agents.MobileRechargeAgent;

public class VodafoneMobileRechargeAgent implements MobileRechargeAgent {

            @Override
            public boolean recharge(String mobileNo, String pkg, float amount) {
                        System.out.println("Recharge Vodafone mobileNo:" + mobileNo + " with amount: " + amount);
                        return true;

            }

package com.freerecharge.vodafone.agent.factory;

import com.freerecharge.agent.factory.AbstactAgentFactory;
import com.freerecharge.agents.DTHRechargeAgent;
import com.freerecharge.agents.MobileRechargeAgent;
import com.freerecharge.vodafone.agent.VodafoneDTHRechargeAgent;
import com.freerecharge.vodafone.agent.VodafoneMobileRechargeAgent;

public class VodafoneAgentFactory extends AbstactAgentFactory {

            @Override
            protected MobileRechargeAgent createMobileRechargeAgent() {
                        return new VodafoneMobileRechargeAgent();
            }

            @Override
            protected DTHRechargeAgent createDTHRechargeAgent() {
                        return new VodafoneDTHRechargeAgent();
            }

}


package com.freerecharge.factory;

import com.freerecharge.agent.factory.AbstactAgentFactory;
import com.freerecharge.airtel.agent.factory.AirtelAgentFactory;
import com.freerecharge.vodafone.agent.factory.VodafoneAgentFactory;

// factory of factory
public class FreerechargeFactory {

            public static AbstactAgentFactory newAgentFactory(String provider) {
                        AbstactAgentFactory agentFactory = null;
                        if (provider.equals("airtel")) {
                                    agentFactory = new AirtelAgentFactory();
                        } else if (provider.equals("vodafone")) {
                                    agentFactory = new VodafoneAgentFactory();
                        }
                        return agentFactory;
            }
}


------------------------------------

}

package com.freerecharge.store;

import com.freerecharge.agent.factory.AbstactAgentFactory;
import com.freerecharge.agents.DTHRechargeAgent;
import com.freerecharge.agents.MobileRechargeAgent;
import com.freerecharge.factory.FreerechargeFactory;

public class FreerechargeStore {
            public boolean rechargeMobile(String provider, String mobileNo, String pkg, float amount) {
                        boolean flag = false;
                        AbstactAgentFactory agentFactory = null;
                        MobileRechargeAgent mobileRechargeAgent = null;
                        agentFactory = FreerechargeFactory.newAgentFactory(provider);
                        mobileRechargeAgent = agentFactory.newMobileRechargeAgent();
                        mobileRechargeAgent.recharge(mobileNo, pkg, amount);
                        flag = true;
                        return flag;
            }

            public float rechargeDTH(String provider, String acountNo, String pkg, float amount) {
                        AbstactAgentFactory agentFactory = null;
                        DTHRechargeAgent dthRechargeAgent = null;
                        agentFactory = FreerechargeFactory.newAgentFactory(provider);
                        dthRechargeAgent = agentFactory.newDTHRechargeAgent();
                        dthRechargeAgent.recharge(acountNo, pkg, amount);
                        return amount;
            }
}

---------------
package com.freerecharge.test;

import com.freerecharge.store.FreerechargeStore;

public class FreerechargeTest {

            public static void main(String[] args) {
                        FreerechargeStore store = new FreerechargeStore();
                        store.rechargeMobile("vodafone", "787878", "499-plan", 499);
                        store.rechargeDTH("airtel", "AIR3434", "599-plan", 599);
            }

}

Comments