Introduction
Abstract Factory Pattern can be defined as factory of factories. You can see the reason by looking at the example.
Example
Suppose you have 2 factories. Each factory makes phones and laptops. Suppose first factory is AppleFactory and other one is ToshibaFactory. AppleFactory makes IPhone and Mac laptop. ToshibaFactory makes ToshibaPhone and ToshibaLaptop. Let's see the code.
Phone.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public abstract class Phone { public abstract String getCategory(); }
Laptop.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public abstract class Laptop { public abstract String getOperatingSystem(); }
Factory.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public interface Factory { public Phone createPhone(); public Laptop createLaptop(); }
IPhone.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class IPhone extends Phone { @Override public String getCategory() { return "Mobile Phone"; } }
Mac.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class Mac extends Laptop { @Override public String getOperatingSystem() { return "Mac"; } }
AppleFactory.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class AppleFactory implements Factory { @Override public Phone createPhone() { return new IPhone(); } @Override public Laptop createLaptop() { return new Mac(); } }
ToshibaPhone.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class ToshibaPhone extends Phone { @Override public String getCategory() { return "Land Phone"; } }
ToshibaLaptop.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class ToshibaLaptop extends Laptop { @Override public String getOperatingSystem() { return "Windows 7"; } }
ToshibaFactory.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class ToshibaFactory implements Factory { @Override public Phone createPhone() { return new ToshibaPhone(); } @Override public Laptop createLaptop() { return new ToshibaLaptop(); } }
Main.java
package com.blog.patterns.abstractfactory; /** * @author uditha */ public class Main { public static void main(String[] args) { // apple factory Factory factory = new AppleFactory(); Phone phone = factory.createPhone(); Laptop laptop = factory.createLaptop(); System.out.println(phone.getCategory()); System.out.println(laptop.getOperatingSystem()); // toshiba factory factory = new ToshibaFactory(); phone = factory.createPhone(); laptop = factory.createLaptop(); System.out.println(phone.getCategory()); System.out.println(laptop.getOperatingSystem()); } }
No comments:
Post a Comment