Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Rūpnīcas (vai rūpnīcas metodes) dizaina modelis specializējas deleģēšanā un iekapsulēšanā. Šis modelis ļauj virsklasei atlikt instantiāciju uz apakšklasēm. Tas ir tāpēc, ka klase, kas satur primāro rūpnīcas metodes modeli, ir abstrakta.

Sākotnējā rūpnīcas metodes versija ir neīstenota metode, jo tā nezina produktu, ko tā izveidos. Rūpnīcas metode var zināt, ka tā rada kādu produktu, taču tā nezina ražojuma specifiskās īpašības. Šīs zināšanas ir pieejamas tikai attiecīgajām apakšklasēm. Tāpēc atbildība par rūpnīcas metodes ieviešanu un atbilstošu objektu izveidi ir tikai apakšklasei.

Rūpnīcas dizaina modeļa ieviešana Java

Šajā rakstā tiek izmantots atsauksmju atskaites ģenerēšanas lietojumprogrammas paraugs. Šī lietojumprogramma izmanto dažāda veida atsauksmes, ko uzņēmums saņem (jaunai uzkodai), lai izveidotu īpašus pārskatus (izmantojot rūpnīcas metodi). Tāpēc rūpnīcas modelis izveidos īpašu atgriezenisko saiti (vai atsauksmju ziņojumu), par pamatu izmantojot šādu primāro produktu klasi:

publiskiabstraktsklasēAtsauksmes{

Privāts Stīga recenzenta Vārds;
Privāts Stīga pārskatsZiņojums;
Privātsstarpt pārskatsVērtējumi;

publiskiAtsauksmes(String reviewerName, String reviewMessage, starpt atsauksmesVērtējumi){
šis.reviewerName = recenzentaVārds;
šis.reviewMessage = reviewMessage;
šis.reviewRatings = reviewRatings;
}

publiski Stīga getReviewerName(){
atgriezties recenzenta Vārds;
}
publiskinederīgssetReviewerName(virknes pārskatītājaName){
šis.reviewerName = recenzentaVārds;
}
publiski Stīga getReviewMessage(){
atgriezties pārskatsZiņojums;
}
publiskinederīgssetReviewMessage(String reviewMessage){
šis.reviewMessage = reviewMessage;
}
publiskistarptgetReviewRatings(){
atgriezties pārskatsVērtējumi;
}
publiskinederīgssetReviewRatings(starpt atsauksmesVērtējumi){
šis.reviewRatings = reviewRatings;
}
}

Katrai atsauksmei būs trīs obligāti rekvizīti, recenzenta vārds, atsauksmes ziņojums un skaitļa vērtējums (no viena līdz pieci) jaunajai uzkodai. Dažāda veida atsauksmes, ko uzņēmums saņems, nāks no viena no trim kanāliem:

E-pasta atsauksmju klase

publiskiklasēE-pastsAtsauksmespagarinaAtsauksmes{

Privāts Stīga recenzentsE-pasts;

publiska e-pasta atsauksmes(Stīga recenzenta vārds, Stīga pārskatsZiņojums, int reviewVērtējumi, Stīga pārskatītājaE-pasts) {
super(reviewerName, reviewMessage, reviewRatings);
šis.reviewerEmail = pārskatītājaEmail;
}
publiski Stīga getReviewerEmail(){
atgriezties recenzentsE-pasts;
}
publiskinederīgssetReviewerEmail(virknes pārskatītāja e-pasts){
šis.reviewerEmail = pārskatītājaEmail;
}
}

Pasta atsauksmju klase

publiskiklasēMailFedbackpagarinaAtsauksmes{

Privāts Stīga Atgriešanās adrese;

publiska pasta atgriezeniskā saite (Stīga recenzenta vārds, Stīga pārskatsZiņojums, int reviewVērtējumi, Stīga Atgriešanās adrese) {
super(reviewerName, reviewMessage, reviewRatings);
šis.returnAddress = returnAddress;
}

publiski Stīga getReturnAddress(){
atgriezties Atgriešanās adrese;
}

publiskinederīgssetReturnAddress(String returnAddress){
šis.returnAddress = returnAddress;
}
}

Sociālo mediju atsauksmju klase

publiskiklasēSocialMediaAtsauksmespagarinaAtsauksmes{

Privāts Stīga recenzentsRokturis;

publiska SocialMediaFeedback(Stīga recenzenta vārds, Stīga pārskatsZiņojums, int reviewVērtējumi, Stīga reviewerHandle) {
super(reviewerName, reviewMessage, reviewRatings);
šis.reviewerHandle = reviewerHandle;
}

publiski Stīga getReviewerHandle(){
atgriezties recenzentsRokturis;
}

publiskinederīgssetReviewerHandle(String reviewerHandle){
šis.reviewerHandle = reviewerHandle;
}
}

Jūs ievērosiet, ka katrai atsauksmju apakšklasei ir unikāls īpašums. Tas nozīmē, ka jums būs jāizveido pārskats katram atsauksmju veidam, izmantojot vismaz vienu rekvizītu, kas ir unikāls šim veidam.

Vienkāršā rūpnīca

Vienkārša rūpnīca ir populāra pieeja rūpnīcas dizaina modeļa izmantošanai. Šī pieeja ietver visu atšķirīgo atsauksmju (vai produktu) grupēšanu metodē (vienkāršā rūpnīcā) un atbilstošo atgriezenisko saiti, pamatojoties uz parametru.

publiskiklasēFeedbackReportFactory{

publiski Atsauksmes veiktAtsauksmes(Virknes atsauksmes veids){
Atsauksmes atsauksmes = null;

ja(feedbackType.equals("e-pasts")) {
atsauksmes = jauns E-pastsAtsauksmes();
}citsja (feedbackType.equals("pasts")) {
atsauksmes = jauns MailFeedback();
}citsja (feedbackType.equals("sociālais")) {
atsauksmes = jauns SocialMediaFeedback();
}
atgriezties atgriezeniskā saite;
}
}

Tomēr vienkārša rūpnīcas pieeja nav ne rūpnīcas dizaina modelis, ne dizaina modelis. Tas vairāk atgādina dizaina koncepciju.

Rūpnīcas metode

Rūpnīcas metode ir patiess dizaina modeļa attēlojums. Izmantojot rūpnīcas metodi, reformēts FeedbackReportFactoryJava klase tagad būs šāds kods:

publiskiabstraktsklasēFeedbackReportFactory{
publiskiabstraktsnederīgsmakeFeedbackReport(Atsauksmes par atsauksmēm);
}

Rūpnīcas dizaina modeļa struktūru var definēt ar šādu klašu diagrammu:

Iepriekš redzamajā diagrammā redzēsit, ka abstraktā klase (vai interfeiss) ietvers rūpnīcas metodes abstraktu versiju. Tātad betona rūpnīcas klases, kas paplašina abstrakto klasi, ieviesīs rūpnīcas metodi, izmantojot īpašības, kas ir unikālas produktam, kuru tas vēlas izveidot. Jāņem vērā arī tas, ka jebkurai betona rūpnīcas klasei ir jāizveido viens vai vairāki produkti.

Pieteikuma paraugā ir trīs saistīti, bet unikāli produkti. Katram atsauksmju veidam ir vismaz viens unikāls rekvizīts. Tātad, lietojumprogrammā būs jābūt trim betona rūpnīcām, lai izveidotu katru produktu.

E-pasta atsauksmju rūpnīca

publiskiklasēE-pastsAtsauksmesPārskatspagarinaFeedbackReportFactory{

E-pastsAtsauksmes par atsauksmēm;

@Override
publiskinederīgsmakeFeedbackReport(Atsauksmes par atsauksmēm){

šis.feedback = (EmailFeedback) atsauksmes;

Sistēma.ārā.println("\nReportPriekšAtsauksmesCaurE-pasts" +
"\nRecenzenta vārds: " +šis.feedback.getReviewerName() +
"\nAtsauksmes: " + šis.feedback.getReviewMessage() +
"\nVērtējumi: " + šis.feedback.getReviewRatings() +
"\nEmal adrese: " + šis.feedback.getReviewerEmail());
}
}

Pasta atsauksmju rūpnīca

publiskiklasēMailFeedbackReportpagarinaFeedbackReportFactory{
MailFeedback atsauksmes;

@Override
publiskinederīgsmakeFeedbackReport(Atsauksmes par atsauksmēm){
šis.feedback = (MailFeedback) atsauksmes;

Sistēma.ārā.println("\nReportPriekšAtsauksmesCaurPasts" +
"\nRecenzenta vārds: " +šis.feedback.getReviewerName() +
"\nAtsauksmes: " + šis.feedback.getReviewMessage() +
"\nVērtējumi: " + šis.feedback.getReviewRatings() +
"\nPasta adrese: " + šis.feedback.getReturnAddress());
}
}

Sociālo mediju atsauksmju fabrika

publiskiklasēSocialMediaFeedbackReportpagarinaFeedbackReportFactory{
SocialMediaFeedback atsauksmes;

@Override
publiskinederīgsmakeFeedbackReport(Atsauksmes par atsauksmēm){
šis.feedback = (SocialMediaFeedback) atsauksmes;

Sistēma.ārā.println("\nReportPriekšAtsauksmesCaurSociāliePlašsaziņas līdzekļi" +
"\nRecenzenta vārds: " + šis.feedback.getReviewerName() +
"\nAtsauksmes: " + šis.feedback.getReviewMessage() +
"\nVērtējumi: " + šis.feedback.getReviewRatings() +
"\nRecenzenta sociālo mediju rokturis: " + šis.feedback.getReviewerHandle());
}
}

Lietojumprogrammas parauga pārbaude

Tagad varat izmantot attiecīgās rūpnīcas metodes, lai izveidotu miniatūras atskaites par atsauksmēm, kas saņemtas no dažādiem kanāliem. Jūs varat pārbaudiet lietojumprogrammu, izmantojot JUnit, vai arī varat izveidot vadītāja klasi:

publiskiklasēGalvenā{

publiskistatisksnederīgsgalvenais(String[] args){
Atsauksmes atsauksmes = jauns E-pastsAtsauksmes ("Niks", "Lielisks produkts!", 5, "[email protected]");
Atsauksmes atsauksmes2 = jauns MailFeedback("Džons", "Produkts ir labs, bet ne tas, ko es regulāri pirktu", 4, "Pirmā iela");
Atsauksmes atsauksmes3 = jauns SocialMediaFeedback("Džeina", "Tas nav priekš manis", 2, "@janey");

AtsauksmesReportFactory rūpnīca = jauns E-pastsFeedbackReport();
AtsauksmesReportFactory factory2 = jauns MailFeedbackReport();
AtsauksmesReportFactory rūpnīca3 = jauns SocialMediaFeedbackReport();

rūpnīca.makeFeedbackReport(atsauksmes);
rūpnīca2.makeFeedbackReport(atsauksmes2);
rūpnīca3.makeFeedbackReport(atsauksmes3);
}

Iepriekš minētajā galvenajā klasē tiek izmantotas attiecīgās rūpnīcas, lai izveidotu trīs atskaites, kas konsolē rada šādu izvadi:

Rūpnīcas dizaina modeļa izmantošanas priekšrocības

Rūpnīcas dizaina modelis veicina dizaina elastību, kur jūs izmantojat saskarnes (vai abstraktas klases), lai izveidotu konkrētas klases. Tas arī veicina mērogojamību, izmantojot polimorfismu, ļaujot jaunām klasēm ieviest esošo saskarni, lietojumprogrammai paplašinoties.

Kad izmantojat rūpnīcas dizaina modeli, jūs izmantojat divus svarīgus projektēšanas principus: atvērtu-slēgtu un vadības inversiju (IoC).