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); } } |