Abstract Factory
Crea objetos de diferentes familias de clases. Es un Factory para crear Factories.
En el ejemplo se necesita crear objetos gráficos como: Button, Panel, Windows, TextField, entre otros. Debido a que se desea que la aplicación sea multiplataforma, se crean Factories para crear los objetos gráficos dependiendo de la plataforma (Windows, Linux).
Ejemplo de uso:
GuiFactory guiFactory = GuiFactorySelector.getFactory(OS.LINUX);
Button button = guiFactory.createButton(); // Botón que funcionará solo en linux
button.paint(); // Salida: Linux Button
Panel panel = guiFactory.createPanel(); // Panel que funcionará solo en linux
panel.paint(); // Salida: Linux Panel
Este patrón puede ser usado cuando una solución debe funcionar con diferentes variantes de una familia de objetos. Abstrae al desarrollador de la creación de los objetos, y solo tiene la responsabilidad de crear objetos asociados entre sí.