π What is the Factory Design Pattern?
The Factory Pattern is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.
Itβs commonly used when the exact type of the object isn't known until runtime.
β When Should You Use It?
- When you have a superclass with multiple subclasses, and you need to instantiate one subclass based on input or logic.
- When object creation is complex or involves logic that shouldn't be exposed to the client code.
- To follow the Open/Closed Principle β open for extension, closed for modification.
π§ Real-World Analogy
Think of a shape drawing tool. You select "Circle", "Square", or "Rectangle" from a dropdown, and it draws it. Behind the scenes, a ShapeFactory creates the correct object depending on your input.
π§± Structure
// 1. Product Interface interface Shape { void draw(); } // 2. Concrete Products class Circle implements Shape { public void draw() { System.out.println("Drawing a Circle."); } } class Square implements Shape { public void draw() { System.out.println("Drawing a Square."); } } class Rectangle implements Shape { public void draw() { System.out.println("Drawing a Rectangle."); } } // 3. Factory Class class ShapeFactory { public Shape getShape(String shapeType) { if (shapeType == null) return null; switch (shapeType.toLowerCase()) { case "circle": return new Circle(); case "square": return new Square(); case "rectangle": return new Rectangle(); default: throw new IllegalArgumentException("Unknown shape: " + shapeType); } } } // 4. Client Code public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("Circle"); shape1.draw(); // Drawing a Circle. Shape shape2 = shapeFactory.getShape("Square"); shape2.draw(); // Drawing a Square. Shape shape3 = shapeFactory.getShape("Rectangle"); shape3.draw(); // Drawing a Rectangle. } }
π§ͺ Output:
Drawing a Circle. Drawing a Square. Drawing a Rectangle.
βοΈ UML Diagram (Text Format)
+---------------+ | Shape |<-----------------+ +---------------+ | | +draw() | | +---------------+ | ^ | +------------+------------+ | | | | | +---------+ +---------+ +-----------+ | | Circle | | Square | | Rectangle | | +---------+ +---------+ +-----------+ | | +draw() | | +draw() | | +draw() | | +---------+ +---------+ +-----------+ | | +---------------------+ | ShapeFactory | +---------------------+ | +getShape(type):Shape| +---------------------+
π§βπ« Key Takeaways
- Factory pattern decouples object creation logic from client code.
- Improves maintainability and scalability.
- Promotes programming to interfaces, not implementations.
Would you like to continue this series tomorrow with Builder or a different pattern from your list? I can maintain the same structure with code, diagrams, and practical clarity!
Top comments (0)