Skryje voľbu konkrétnej triedy do jedinej vytváracej metódy.
class Doprava { dorucit(zasielka) { throw new Error('abstraktná metóda'); }} class Kamion extends Doprava { dorucit(zasielka) { // po ceste }} class Lod extends Doprava { dorucit(zasielka) { // po mori }} class Dron extends Doprava { dorucit(zasielka) { // vzduchom }} // Jediné miesto v aplikácii, kde sa menujú konkrétne triedy.class DopravaFabrika { static pre(trasa) { if (trasa === 'cesta') return new Kamion(); if (trasa === 'more') return new Lod(); if (trasa === 'vzduch') return new Dron(); throw new Error('neznáma trasa: ' + trasa); }} const a = DopravaFabrika.pre('cesta');const b = DopravaFabrika.pre('more');const c = DopravaFabrika.pre('vzduch'); a.dorucit(zasielka); // klient nenapísal ani jeden new