Vytvára celé rodiny súvisiacich objektov bez väzby na ich konkrétne triedy.
class GUIFactory { createButton() { throw new Error('abstraktná metóda'); } createCheckbox() { throw new Error('abstraktná metóda'); } createMenu() { throw new Error('abstraktná metóda'); }} class WinFactory extends GUIFactory { createButton() { return new WinButton(); } createCheckbox() { return new WinCheckbox(); } createMenu() { return new WinMenu(); }} class MacFactory extends GUIFactory { createButton() { return new MacButton(); } createCheckbox() { return new MacCheckbox(); } createMenu() { return new MacMenu(); }} // factory je GUIFactory, konkrétnu triedu tu nikde nevidnofunction renderApp(factory) { const button = factory.createButton(); const checkbox = factory.createCheckbox(); const menu = factory.createMenu(); return [button, checkbox, menu];} renderApp(new WinFactory());renderApp(new MacFactory());