publicclassDriverForWinXP {
// setup a specific widget factoryWidgetFactorywf=newWinXPWidgetFactory();
// start a client programUIToolKitui=newUIToolKiet(wf);
// rest of code
}
Class Diagram for GUIFactory
Class Diagram for Abstract Factory Pattern
Participants
AbstractFactory
Declares an interface for operations that create abstract product objects.
ConcreteFactory
Implements the operations to create concrete product objects.
AbstractProduct
Declares an interface for a type of product object.
ConcreteProduct
Defines a product object to be created by the corresponding concrete factory.
Implements the AbstractProduct interface.
Client
Uses only interfaces declared by AbstractFactory and AbstractProduct classes.
Other Example
Making Factories for Ingredients (Abstract Factory)
publicinterfacePizzaIngredientFactory {
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Pepperoni createPepperoni();
public Clams createClam();
}
Concrete PizzaIngredientFactory (Factory Object)
publicclassNYPizzaIngredientFactoryimplementsPizzaIngredientFactory {
public Dough createDough() {
returnnewThinCrustDough();
}
public Sauce createSauce() {
returnnewMarinaraSauce();
}
public Cheese createCheese() {
returnnewReggianoCheese();
}
public Veggies[] createVeggies() {
Veggies veggies[] = {newGarlic(), newOnion(), newMushroom(),
newRedPepper() };
return veggies;
}
public Pepperoni createPepperoni() {
returnnewSlicedPepperoni();
}
public Clams createClam() {
returnnewFreshClams();
}
}
Pizza product class
publicabstractclassPizza {
String name;
Dough dough;
Sauce sauce;
Veggies veggies[];
Cheese cheese;
abstractpublicvoidprepare();
publicvoidbake() {
System.out.println("Bake for 25 minutes at 350");
}
publicvoidcut() {
System.out.println("Cutting the pizza into diagonal slices");
}
publicvoidbox() {
System.out.println("Place pizza in official PizzaStore box");
}
publicvoidsetName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
returnthis.getName();
}
}