Kompiuterių programavime gamykla yra objektas, naudojamas kitiems objektams kurti. Objektai šiuo atveju reiškia kode naudojamas reikšmes, funkcijas arba duomenų struktūras. Gamyklos modelis yra dizaino modelis, kuris priklauso nuo gamyklų gaminant objektus, o ne kuriant objektus tiesiogiai. Tai leidžia lengvai pakeisti kodą ir išlaikyti lankstumą. Jis plačiai naudojamas objektiniame kompiuterių programavime, kuris naudoja objektus programoms ir programoms kurti.
Gamykla turi metodą kiekvienos rūšies objektui, kurį gali sukurti. Metodas iš esmės yra modelis. Jį sudaro instrukcijų rinkinys, žinomas kaip paprogramė, kuri paima parametrus, paprastai pateikiamus vartotojo, ir išveda konkretų objektą. Dažniausiai tai vyksta užkulisiuose, vartotojui ar klientui nieko apie tai nežinant.
Naudojant gamyklinį modelį, programa sąveikauja su bendra sąsaja, o ne tiesiogiai bendrauja su klasėmis. Klasė naudojama kaip šablonas objektams kurti. Kiekvienas konkrečios klasės objektas turi tą patį elgesį ir pagrindinius požymius. Klasės gali būti toliau skirstomos į poklasius, kurių kiekvienas paveldi tam tikrus klasės, kuriai jis priklauso, atributus. Tam tikros klasės objektas yra žinomas kaip tos klasės pavyzdys.
Jei, pavyzdžiui, vartotojas norėtų, kad programa sukurtų kvadratą programoje arba operacinėje sistemoje, kuri naudoja gamyklinį šabloną, programa praneštų gamyklai, kad vartotojui reikia objekto, kurio keturios kraštinės būtų vienodo ilgio ir keturi stačiai. Gamykla pranešdavo formos metodui, kad reikia formos. Jis gali perduoti kai kuriuos kvadrato parametrus, pvz., plotą, kurį vartotojas norėtų uždengti kvadratu.
Poklasiai nuspręstų, kurią klasę naudoti. Klasės kvadrato egzempliorius būtų grąžintas gamyklai, kuri perduotų jį programai, kuri pirmą kartą to paprašė. Vartotojas matys tik tą informaciją, kuri buvo išsiųsta į gamyklą ir gamyklos grąžinta. Gamyklos vidaus darbų nematyti.
Gamyklos modelio pranašumas yra tas, kad programa gali būti lengvai keičiama. Nauji tipai gali būti pridėti prie gamyklos modelio tiesiog modifikuojant nedidelę kliento kodo dalį, paprastai ne daugiau kaip vieną eilutę. Kiti programavimo modeliai reikalauja, kad programuotojas pakeistų kodą kiekvienoje vietoje, kur sukuriamas objektas.