Instructor: Stefan Mitsch
Abstract Factory produces families of related object
Problem illustration: Application, Window, Button, and other elements are a framework for implementing user interfaces.
Application
Window
Button
What kind of specific Window and Button should application use?
Problem
Intent
new
Structure
create
public abstract class AbstractFactory { public abstract Room createRoom(); public abstract Door createDoor(); } public abstract class Room {} public abstract class Door {} // Concrete creator and product: dungeon game public class DungeonFactory extends AbstractFactory { @Override public Room createRoom() { return new Chamber(); } @Override public Door createDoor() { return new WoodenDoor(); } } public class Chamber extends Room {} public class WoodenDoor extends Door {} // Concrete creator and product: enchanted maze game public class EnchantedMazeFactory extends AbstractFactory { @Override public Room createRoom() { return new EnchantedRoom(); } @Override public Door createDoor() { return new EnchantedDoor(); } } public class EnchantedRoom extends Room {} public class EnchantedDoor extends Door {}
Code Smell: Clients directly instantiate classes that implement a common interface
Before: Clients directly instantiate classes
Product
AbstractFactory