Fabrikkmetode er et skapende designmønster, dvs. relatert til oppretting av objekt. I fabrikkmønster oppretter vi objekt uten å utsette skapelseslogikken for klienten, og klienten bruker det samme vanlige grensesnittet for å opprette ny type objekt.
Ideen er å bruke en statisk medlemsfunksjon (statisk fabrikkmetode) som skaper & returnerer forekomster, skjuler detaljene i klassemodulene fra brukeren.
Et fabrikkmønster er et av de viktigste designprinsippene for å lage et objekt, slik at klienter kan lage objekter av et bibliotek (forklart nedenfor) på en slik måte at det ikke har en tett kobling med klassens hierarki i biblioteket.
Hva menes når vi snakker om bibliotek og klienter?
Et bibliotek er noe som leveres av noen tredjepart som avslører noen offentlige APIer og klienter ringer til de offentlige APIene for å fullføre oppgaven. Et veldig enkelt eksempel kan være forskjellige visninger gitt av Android OS.
Hvorfor fabrikkmønster?
La oss forstå det med et eksempel:
Utgang:
I am two wheeler
Hva er problemene med ovennevnte design?
Som du må ha observert i eksemplet ovenfor, oppretter klienten objekter fra begge TwoWheeler eller FourWheeler basert på noen innspill under konstruksjonen av objektet.
Si, biblioteket introduserer en ny klasse ThreeWheeler for å inkludere trehjulede kjøretøy også. Hva ville skjedd? Kunden vil ende opp med å lenke et nytt annet i den betingede stigen for å lage objekter fra ThreeWheeler. Som igjen vil kreve at klienten kompileres på nytt. Så hver gang en ny endring gjøres på biblioteksiden, må klienten gjøre noen tilsvarende endringer på slutten og kompilere koden på nytt. Høres ille ut? Dette er en veldig dårlig praksis for design.
Hvordan unngå problemet?
Svaret er å lage en statisk (eller fabrikk) metode. La oss se koden nedenfor.
Output:
I am three wheeler
I eksemplet ovenfor har vi frakoblet valget av type for objektoppretting fra klienten. Biblioteket er nå ansvarlig for å bestemme hvilken objekttype som skal opprettes basert på en inngang. Kunden trenger bare å ringe til bibliotekets fabrikkopprettingsmetode og passere den typen den ønsker uten å bekymre seg for den faktiske implementeringen av oppretting av objekter.
Takk til Rumplestiltskin for å gi forklaring ovenfor.
Andre eksempler på fabrikkmetode:
- Si, i et ‘tegning’ -system, avhengig av brukerens input, kan forskjellige bilder som firkant, rektangel, sirkel tegnes. Her kan vi bruke fabrikkmetoden til å lage forekomster avhengig av brukerens innspill. For å legge til ny form, trenger du ikke endre klientkoden.
- Et annet eksempel: På reisesiden kan vi bestille togbillett, samt bussbilletter og flybillett. I dette tilfellet kan brukeren oppgi reistypen sin som ‘buss’, ‘tog’ eller ‘fly’.
Her har vi en abstrakt klasse ‘AnyTravel’ med en statisk medlemsfunksjon ‘GetObject’ som avhengig av brukerens reisetype, vil opprett & returobjekt for ‘BusTravel’ eller ‘TrainTravel’. ‘BusTravel’ eller ‘TrainTravel’ har vanlige funksjoner som passasjernavn, Origin, destinasjonsparametere.
Takk til Abhijit Saha som gir de to første eksemplene.