Factory
Definition
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
UML class diagram
Participants
- Product
- defines the interface of objects the factory method creates
- ConcreteProduct
- implements the Product interface
- Creator
- declares the factory method, which returns an object of type Product. Creator may also define a default implementation of the factory method that returns a default ConcreteProduct object.
- may call the factory method to create a Product object.
- ConcreteCreator
- overrides the factory method to return an instance of a ConcreteProduct.
Sample code in Java
package com.hong.factory; interface Product { } class ConcreteProductA implements Product { } class ConcreteProductB implements Product { } interface Creator { public Product factoryMethod(String productName); } class ConcreteCreator implements Creator { @Override public Product factoryMethod(String productName) { if("productA".equals(productName)) return new ConcreteProductA(); if("productB".equals(productName)) return new ConcreteProductB(); return null; } } public class Factory_structure { public static void main(String[] args) { Creator factory = new ConcreteCreator(); Product productA = factory.factoryMethod("productA"); System.out.println("Create a product: " + productA.getClass().getName()); Product productB = factory.factoryMethod("productB"); System.out.println("Create a product: " + productB.getClass().getName()); } }