Gang of Four Creational pattern: Factory Method
Creational Pattern
Creates an instance of several derived classes. Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
To get the code for this example:
git clone https://github.com/spotadev/gangoffour.git
In src/main/java navigate to this package:
com.javaspeak.designpatterns.go4.creational.factorymethod
You can run the code from the main method of:
FactoryMethodApplication
Factory Methods in this example are createSquare() and createTriangle():
Drawing drawing = new Drawing();
drawing.createSquare().draw();
drawing.createTriangle().draw();
createSquare() creates a Square instance and createTriangle() creates a Triangle instance. Both Square and Triangle implement Shape which has a draw() method.
package com.javaspeak.designpatterns.go4.creational.factorymethod;
/**
* Text book description:
* <ul>
* "Factory Method: Creates an instance of several derived classes. Define an interface for
* creating an object, but let subclasses decide which class to instantiate. Factory Method
* lets a class defer instantiation to subclasses."
* </ul>
* Factory Methods in this example are createSquare() and createTriangle():
* <pre>
* Drawing drawing = new Drawing();
* drawing.createSquare().draw();
* drawing.createTriangle().draw();
* </pre>
* createSquare() creates a Square instance and createTriangle() creates a Triangle instance.
* Both Square and Triangle implement Shape which has a draw() method.
* <p>
* @author John Dickerson - 22 Feb 2020
*/
public class FactoryMethodApplication {
/**
* Draws Shapes
*/
public void draw() {
Drawing drawing = new Drawing();
drawing.createSquare().draw();
drawing.createTriangle().draw();
}
public static void main( String[] args ) {
FactoryMethodApplication application = new FactoryMethodApplication();
application.draw();
}
}
package com.javaspeak.designpatterns.go4.creational.factorymethod;
/**
* Has factory methods for creating Squares and Triangles
*
* @author John Dickerson - 24 Feb 2020
*/
public class Drawing {
/**
* Create Squares
*
* @return Square
*/
public Shape createSquare() {
return new Square();
}
/**
* Create Triangle
*
* @return Triangle
*/
public Shape createTriangle() {
return new Triangle();
}
}
package com.javaspeak.designpatterns.go4.creational.factorymethod;
/**
* Shape interface which Square and Triangle implement
*
* @author John Dickerson - 24 Feb 2020
*/
public interface Shape {
/**
* Draws Shape
*/
public void draw();
}
package com.javaspeak.designpatterns.go4.creational.factorymethod;
/**
* Square
*
* @author John Dickerson - 24 Feb 2020
*/
public class Square implements Shape {
@Override
public void draw() {
StringBuilder sb = new StringBuilder();
sb.append( "xxxx\n" );
sb.append( "x x\n" );
sb.append( "x x\n" );
sb.append( "xxxx\n" );
System.out.println( sb.toString() );
}
}
package com.javaspeak.designpatterns.go4.creational.factorymethod;
/**
* Triangle
*
* @author John Dickerson - 24 Feb 2020
*/
public class Triangle implements Shape {
@Override
public void draw() {
StringBuilder sb = new StringBuilder();
sb.append( " x \n" );
sb.append( " x x \n" );
sb.append( " x x \n" );
sb.append( "xxxxxxx\n" );
System.out.println( sb.toString() );
}
}
Back: Gang of Four
Page Author: JD