U računalnom programiranju, tvornica je objekt koji se koristi za stvaranje drugih objekata. Objekti se u ovom slučaju odnose na vrijednosti, funkcije ili strukture podataka korištene u kodu. Tvornički uzorak je uzorak dizajna koji se oslanja na tvornice za izradu objekata, a ne na izravno stvaranje objekata. To omogućuje jednostavno mijenjanje koda i održavanje fleksibilnosti. Široko se koristi u objektno orijentiranom računalnom programiranju, koje koristi objekte za izgradnju programa i aplikacija.
Tvornica ima metodu svake vrste objekta koji može stvoriti. Metoda je u biti uzorak. Sastoji se od skupa instrukcija, poznatih kao potprogram, koji uzima parametre koje obično daje korisnik i ispisuje određeni objekt. Većina se toga događa iza kulisa, a da korisnik ili klijent ne znaju ništa o tome.
Kada se koristi tvornički obrazac, program komunicira sa zajedničkim sučeljem, a ne izravno komunicira s klasama. Klasa se koristi kao predložak za kreiranje objekata. Svaki objekt određene klase dijeli isto ponašanje i osnovne atribute. Klase se dalje mogu podijeliti na podklase, od kojih svaka nasljeđuje neke od atributa klase kojoj pripada. Objekt određene klase poznat je kao instanca te klase.
Ako bi, na primjer, korisnik želio da program kreira kvadrat u programu ili operativnom sustavu koji koristi tvornički uzorak, program bi obavijestio tvornicu da korisniku treba objekt koji ima četiri strane jednake duljine i četiri prava kuta. Tvornica bi obavijestila metodu oblika da je oblik potreban. Može proslijediti neke parametre kvadrata, kao što je područje koje bi korisnik želio da kvadrat pokrije.
Podklase bi odlučile koju klasu treba koristiti. Instanca kvadrata klase bi se vratila u tvornicu, koja bi ga proslijedila programu koji je to prvi zatražio. Korisnik bi vidio samo da su podaci poslani u tvornicu i vraćeni od strane tvornice. Unutarnji rad tvornice ne može se vidjeti.
Prednost korištenja tvorničkog uzorka je u tome što omogućuje jednostavnu promjenu programa. Nove vrste mogu se dodati u tvornički uzorak jednostavno modificiranjem sićušnog dijela klijentskog koda, obično ne više od jednog retka. Drugi obrasci programiranja zahtijevaju od programera da promijeni kod na svakom mjestu gdje je objekt stvoren.