Skladá zložitý objekt po krokoch, aby rovnaký postup dal rôzne výsledky.
class Stavitel { zaklad() { throw new Error('abstraktná metóda'); } naplna() { throw new Error('abstraktná metóda'); } dresing() { throw new Error('abstraktná metóda'); } vysledok() { throw new Error('abstraktná metóda'); }} class BurgerStavitel extends Stavitel { diely = []; zaklad() { this.diely.push(new Zemla()); } naplna() { this.diely.push(new Karbonatka()); } dresing() { this.diely.push(new Dresing()); } // Burger vznikne až tu. Dovtedy existujú len diely. vysledok() { return new Burger(this.diely); }} class ReceptStavitel extends Stavitel { riadky = []; zaklad() { this.riadky.push('1. Prekroj žemľu.'); } naplna() { this.riadky.push('2. Opeč karbonátku.'); } dresing() { this.riadky.push('3. Pridaj dresing.'); } vysledok() { return new Recept(this.riadky); }} // Kuchyňa pozná postup a nič iné. Výsledok nikdy nedrží.class Kuchyna { priprav(stavitel) { stavitel.zaklad(); stavitel.naplna(); stavitel.dresing(); }} const kuchyna = new Kuchyna(); const s1 = new BurgerStavitel();kuchyna.priprav(s1);s1.vysledok(); // Burger const s2 = new ReceptStavitel();kuchyna.priprav(s2);s2.vysledok(); // Recept — ten istý postup, iný výsledok