Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Vzorec načrtovanja tovarne (ali tovarniške metode) je specializiran za delegiranje in enkapsulacijo. Ta vzorec omogoča nadrazredu, da odloži instanciacijo na podrazrede. To je zato, ker je razred, ki vsebuje primarni vzorec tovarniške metode, abstrakten.

Prvotna različica tovarniške metode prevzame obliko neimplementirane metode, ker ne pozna izdelka, ki ga bo ustvarila. Tovarniška metoda morda ve, da ustvarja nek izdelek, vendar ne pozna posebnih značilnosti izdelka, ki ga bo ustvarila. To znanje je na voljo le ustreznim podrazredom. Zato je odgovornost za implementacijo tovarniške metode in ustvarjanje ustreznih objektov izključno odgovornost podrazreda.

Implementacija tovarniškega oblikovalskega vzorca v Javi

Ta članek uporablja vzorčno aplikacijo za ustvarjanje poročila s povratnimi informacijami. Ta aplikacija uporablja različne vrste povratnih informacij, ki jih prejme podjetje (za nov prigrizek), da ustvari posebna poročila (z uporabo tovarniške metode). Zato bo tovarniški vzorec ustvaril specifično povratno informacijo (ali povratno poročilo), pri čemer bo kot osnovo uporabil naslednji primarni razred izdelkov:

instagram viewer

javnostipovzetekrazredPovratne informacije{

zasebno Vrvica ime ocenjevalca;
zasebno Vrvica reviewMessage;
zasebnoint reviewRatings;

javnostiPovratne informacije(String reviewerName, String reviewMessage, int pregled Ocene){
to.reviewerName = recenzentName;
to.reviewMessage = pregledno sporočilo;
to.reviewRatings = ocene pregledov;
}

javnosti Vrvica getReviewerName(){
vrnitev ime ocenjevalca;
}
javnostiprazninasetReviewerName(Ime pregledovalca niza){
to.reviewerName = recenzentName;
}
javnosti Vrvica getReviewMessage(){
vrnitev reviewMessage;
}
javnostiprazninasetReviewMessage(String reviewMessage){
to.reviewMessage = pregledno sporočilo;
}
javnostiintgetReviewRatings(){
vrnitev reviewRatings;
}
javnostiprazninasetReviewRatings(int pregled Ocene){
to.reviewRatings = ocene pregledov;
}
}

Vsaka povratna informacija bo imela tri obvezne lastnosti, ime recenzenta, sporočilo o recenziji in številčno oceno (od ena do pet) za novi prigrizek. Različne vrste povratnih informacij, ki jih bo prejelo podjetje, bodo prihajale iz enega od treh kanalov:

Razred povratnih informacij po e-pošti

javnostirazredEmailFeedbackse raztezaPovratne informacije{

zasebno Vrvica e-pošta recenzenta;

javni emailfeedback(Vrvica ime ocenjevalca, Vrvica reviewMessage, int reviewRatings, Vrvica e-pošta recenzenta) {
super(ime ocenjevalca, sporočilo ocene, ocene ocene);
to.reviewerEmail = e-pošta recenzenta;
}
javnosti Vrvica getReviewerEmail(){
vrnitev e-pošta recenzenta;
}
javnostiprazninasetReviewerEmail(E-pošta pregledovalca niza){
to.reviewerEmail = e-pošta recenzenta;
}
}

Razred povratnih informacij po pošti

javnostirazredMailFeedbackse raztezaPovratne informacije{

zasebno Vrvica povratni naslov;

javni MailFeedback(Vrvica ime ocenjevalca, Vrvica reviewMessage, int reviewRatings, Vrvica returnAddress) {
super(ime ocenjevalca, sporočilo ocene, ocene ocene);
to.returnAddress = povratni naslov;
}

javnosti Vrvica getReturnAddress(){
vrnitev povratni naslov;
}

javnostiprazninasetReturnAddress(String returnAddress){
to.returnAddress = povratni naslov;
}
}

Razred povratnih informacij o družbenih medijih

javnostirazredSocialMediaFeedbackse raztezaPovratne informacije{

zasebno Vrvica reviewerHandle;

javni SocialMediaFeedback(Vrvica ime ocenjevalca, Vrvica reviewMessage, int reviewRatings, Vrvica reviewerHandle) {
super(ime ocenjevalca, sporočilo ocene, ocene ocene);
to.reviewerHandle = reviewerHandle;
}

javnosti Vrvica getReviewerHandle(){
vrnitev reviewerHandle;
}

javnostiprazninasetReviewerHandle(String reviewerHandle){
to.reviewerHandle = reviewerHandle;
}
}

Opazili boste, da ima vsak podrazred povratnih informacij edinstveno lastnost. To pomeni, da boste morali ustvariti poročilo za vsako vrsto povratne informacije z uporabo vsaj ene lastnosti, ki je edinstvena za to vrsto.

Preprosta tovarna

Preprosta tovarna je priljubljen pristop k uporabi tovarniškega načrtovalskega vzorca. Ta pristop vključuje združevanje vseh različnih povratnih informacij (ali izdelkov) v metodo (preprosta tovarna) in izbiro ustreznih povratnih informacij na podlagi parametra.

javnostirazredFeedbackReportFactory{

javnosti Povratne informacije makeFeedback(String feedbackType){
Povratne informacije = nič;

če(feedbackType.equals("E-naslov")) {
povratne informacije = novo EmailFeedback();
}drugačeče (feedbackType.equals("pošta")) {
povratne informacije = novo MailFeedback();
}drugačeče (feedbackType.equals("družabno")) {
povratne informacije = novo SocialMediaFeedback();
}
vrnitev povratne informacije;
}
}

Vendar pa preprost tovarniški pristop ni vzorec načrtovanja tovarne, niti ni vzorec načrtovanja. To je bolj kot koncept oblikovanja.

Tovarniška metoda

Tovarniška metoda je prava predstavitev oblikovalskega vzorca. Z uporabo tovarniške metode, reformirane FeedbackReportFactoryJava razred bo zdaj vseboval naslednjo kodo:

javnostipovzetekrazredFeedbackReportFactory{
javnostipovzetekprazninamakeFeedbackReport(povratne informacije);
}

Strukturo tovarniškega načrtovalnega vzorca lahko definirate z naslednjim diagramom razredov:

Iz zgornjega diagrama boste videli, da bo abstraktni razred (ali vmesnik) vseboval abstraktno različico tovarniške metode. Torej bodo konkretni tovarniški razredi, ki razširjajo abstraktni razred, izvajali tovarniško metodo z uporabo lastnosti, ki so edinstvene za izdelek, ki ga želi ustvariti. Upoštevati morate tudi, da mora vsak konkreten tovarniški razred ustvariti enega ali več izdelkov.

Vzorčna aplikacija ima tri povezane, a edinstvene izdelke. Vsak tip povratne informacije ima vsaj eno edinstveno lastnost. Torej bo aplikacija morala imeti tri betonske tovarne za izdelavo vsakega izdelka.

Tovarna povratnih informacij po e-pošti

javnostirazredEmailFeedbackReportse raztezaFeedbackReportFactory{

EmailFeedback povratne informacije;

@Preglasi
javnostiprazninamakeFeedbackReport(povratne informacije){

to.feedback = (EmailFeedback) povratne informacije;

Sistem.ven.println("\nPoročiloZaPovratne informacijeprekE-naslov" +
"\nIme ocenjevalca: " +to.feedback.getReviewerName() +
"\nPovratne informacije: " + to.feedback.getReviewMessage() +
"\nOcene: " + to.feedback.getReviewRatings() +
"\nE-naslov: " + to.feedback.getReviewerEmail());
}
}

Tovarna povratnih informacij po pošti

javnostirazredMailFeedbackReportse raztezaFeedbackReportFactory{
MailFeedback povratne informacije;

@Preglasi
javnostiprazninamakeFeedbackReport(povratne informacije){
to.feedback = (MailFeedback) povratne informacije;

Sistem.ven.println("\nPoročiloZaPovratne informacijeprekPošta" +
"\nIme ocenjevalca: " +to.feedback.getReviewerName() +
"\nPovratne informacije: " + to.feedback.getReviewMessage() +
"\nOcene: " + to.feedback.getReviewRatings() +
"\nPoštni naslov: " + to.feedback.getReturnAddress());
}
}

Tovarna povratnih informacij družbenih medijev

javnostirazredSocialMediaFeedbackReportse raztezaFeedbackReportFactory{
SocialMediaFeedback povratne informacije;

@Preglasi
javnostiprazninamakeFeedbackReport(povratne informacije){
to.feedback = (SocialMediaFeedback) povratne informacije;

Sistem.ven.println("\nPoročiloZaPovratne informacijeprekSocialnoMediji" +
"\nIme ocenjevalca: " + to.feedback.getReviewerName() +
"\nPovratne informacije: " + to.feedback.getReviewMessage() +
"\nOcene: " + to.feedback.getReviewRatings() +
"\nRok družbenega medija pregledovalca: " + to.feedback.getReviewerHandle());
}
}

Testiranje vzorčne aplikacije

Zdaj lahko uporabite ustrezne tovarniške metode za izdelavo miniaturnih poročil o povratnih informacijah, prejetih iz različnih kanalov. Ti lahko preizkusite aplikacijo z uporabo JUnitali pa ustvarite razred gonilnika:

javnostirazredGlavni{

javnostistatičnaprazninaglavni(Argumenti niza[]){
Povratne informacije = novo Povratne informacije po e-pošti ("Nick", "Odličen izdelek!", 5, "[email protected]");
Povratne informacije povratne informacije2 = novo MailFeedback("janez", "Izdelek je dober, vendar ne nekaj, kar bi redno kupoval", 4, "prva ulica");
Povratne informacije povratne informacije3 = novo SocialMediaFeedback("Jane", "Ni zame", 2, "@janey");

FeedbackReportFactory tovarna = novo Poročilo o povratnih informacijah po e-pošti();
FeedbackReportFactory factory2 = novo MailFeedbackReport();
FeedbackReportFactory factory3 = novo SocialMediaFeedbackReport();

tovarna.makeFeedbackReport(povratne informacije);
tovarna2.makeFeedbackReport(povratne informacije2);
tovarna3.makeFeedbackReport(povratne informacije3);
}

Zgornji glavni razred uporablja ustrezne tovarne za ustvarjanje treh poročil, ki v konzoli ustvarijo naslednje rezultate:

Prednosti uporabe tovarniškega vzorca oblikovanja

Vzorec tovarniškega načrtovanja spodbuja fleksibilnost načrtovanja, kjer uporabljate vmesnike (ali abstraktne razrede) za ustvarjanje konkretnih razredov. Prav tako spodbuja razširljivost s polimorfizmom, saj omogoča novim razredom, da izvajajo obstoječi vmesnik, ko se aplikacija širi.

Ko uporabljate tovarniški vzorec načrtovanja, uporabljate dve pomembni načeli načrtovanja: odprto-zaprto in inverzija nadzora (IoC).