Java – Factory Design Pattern

Factory Design Pattern: Define interface or abstract class for creating an object but let the subclasses decide which class to instantiate.

import java.util.*;     
abstract class Plan
{    
            abstract double getRate(); 
            public void calculateBill(double rate, int units)
            { 
                        System.out.println(units*rate); 
            } 
}
class DomesticPlan extends Plan

            public double getRate()
            { 
                        return 3.50;             
            } 
}
class CommercialPlan extends Plan

            public double getRate()
            { 
                        return 7.50;             
            } 
}
class InstitutionalPlan extends Plan

            public double getRate()
            { 
                        return 5.50;             
            } 
}
 
class GetPlan

            public Plan getPlan(String plan)
            { 
                        if(plan == null)
                        { 
                                    return null; 
                        } 
                        if(plan.equals(“domestic”))
                        { 
                                    return new DomesticPlan(); 
                        }  
                        else if(plan.equals(“commercial”))
                        { 
                                    return new CommercialPlan(); 
                        }  
                        else if(plan.equals(“institutional”))
                        { 
                                    return new InstitutionalPlan(); 
                        }
                        return null;
            }
}
class GenerateBill

            public static void main(String args[])
            { 
                        GetPlan plan = new GetPlan(); 
                        System.out.print(“Enter plan name : “); 
     
                        Scanner sc = new Scanner(System.in);
                        String name = sc.next(); 
 
                        System.out.print(“Enter units : “); 
                        int units = sc.nextInt(); 
 
                        Plan p = plan.getPlan(name); 
                        System.out.print(“Bill for ” + name + ” plan of ” + units + ” units is : “); 
                        double rate = p.getRate(); 
                        p.calculateBill(rate, units); 
            } 
}
Scroll to Top