Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk. Olvass tovább.

A gyári (vagy gyári módszer) tervezési minta a delegálásra és a tokozásra specializálódott. Ez a minta lehetővé teszi a szuperosztály számára, hogy elhalassza a példányosítást az alosztályokra. Ennek az az oka, hogy az elsődleges gyári metódusmintát tartalmazó osztály absztrakt.

A gyári módszer eredeti változata egy meg nem valósított metódus formáját ölti, mert nem ismeri az általa létrehozandó terméket. A gyári módszer tudhatja, hogy valamilyen terméket hoz létre, de nem ismeri az általa létrehozandó termék sajátos jellemzőit. Ez a tudás csak az adott alosztályok számára elérhető. Ezért a gyári módszer megvalósítása és a megfelelő objektumok létrehozása kizárólag egy alosztály felelőssége.

A Factory Design Pattern implementálása Java nyelven

Ez a cikk egy minta-visszajelzési jelentést készítő alkalmazást használ. Ez az alkalmazás a különböző típusú visszajelzéseket használja fel, amelyeket a vállalat kap (egy új snackhez), hogy konkrét jelentéseket készítsen (gyári módszerrel). Ezért a gyári minta konkrét visszajelzést (vagy visszajelzési jelentést) hoz létre, alapul véve a következő elsődleges termékosztályt:

instagram viewer

nyilvánosabsztraktosztályVisszacsatolás{

magán Húr lektorName;
magán Húr felülvizsgálatÜzenet;
magánint értékelés Értékelések;

nyilvánosVisszacsatolás(String reviewerName, String reviewMessage, int értékelés Értékelések){
ez.reviewerName = értékelőNév;
ez.reviewMessage = reviewMessage;
ez.reviewRatings = reviewRatings;
}

nyilvános Húr getReviewerName(){
Visszatérés lektorName;
}
nyilvánosüressetReviewerName(String reviewerName){
ez.reviewerName = értékelőNév;
}
nyilvános Húr getReviewMessage(){
Visszatérés felülvizsgálatÜzenet;
}
nyilvánosüressetReviewMessage(String reviewMessage){
ez.reviewMessage = reviewMessage;
}
nyilvánosintgetReviewRatings(){
Visszatérés értékelés Értékelések;
}
nyilvánosüressetReviewRatings(int értékelés Értékelések){
ez.reviewRatings = reviewRatings;
}
}

Minden visszajelzésnek három kötelező tulajdonsága van, egy értékelő neve, egy véleményező üzenet és egy szám szerinti értékelés (egytől ötig) az új snackhez. A különböző típusú visszajelzések, amelyeket a vállalat kap, a következő három csatorna egyikéről érkeznek:

E-mail visszajelzés osztály

nyilvánososztályE-mail VisszajelzéskiterjedVisszacsatolás{

magán Húr értékelőE-mail;

nyilvános e-mail visszajelzés(Húr értékelőNév, Húr felülvizsgálatÜzenet, int reviewÉrtékelések, Húr értékelőEmail) {
szuper(reviewerName, reviewMessage, reviewRatings);
ez.reviewerEmail = felülvizsgálóEmail;
}
nyilvános Húr getReviewerEmail(){
Visszatérés értékelőE-mail;
}
nyilvánosüressetReviewerEmail(Karakterlánc-ellenőr e-mail){
ez.reviewerEmail = felülvizsgálóEmail;
}
}

Mail Visszajelzés osztály

nyilvánososztályMailFeedbackkiterjedVisszacsatolás{

magán Húr visszaszállítási cím;

nyilvános levélvisszajelzés(Húr értékelőNév, Húr felülvizsgálatÜzenet, int reviewÉrtékelések, Húr visszaszállítási cím) {
szuper(reviewerName, reviewMessage, reviewRatings);
ez.returnAddress = returnAddress;
}

nyilvános Húr getReturnAddress(){
Visszatérés visszaszállítási cím;
}

nyilvánosüressetReturnAddress(String returnAddress){
ez.returnAddress = returnAddress;
}
}

Social Media Feedback Class

nyilvánososztálySocialMediaFeedbackkiterjedVisszacsatolás{

magán Húr recenzensHandle;

nyilvános SocialMediaFeedback(Húr értékelőNév, Húr felülvizsgálatÜzenet, int reviewÉrtékelések, Húr reviewerHandle) {
szuper(reviewerName, reviewMessage, reviewRatings);
ez.reviewerHandle = reviewerHandle;
}

nyilvános Húr getReviewerHandle(){
Visszatérés recenzensHandle;
}

nyilvánosüressetReviewerHandle(String reviewerHandle){
ez.reviewerHandle = reviewerHandle;
}
}

Észre fogja venni, hogy minden visszajelzési alosztálynak egyedi tulajdonsága van. Ez azt jelenti, hogy minden visszajelzéstípushoz létre kell hoznia a jelentést legalább egy, az adott típusra egyedi tulajdonság használatával.

Az egyszerű gyár

Az egyszerű gyár népszerű megközelítése a gyári tervezési minta használatának. Ez a megközelítés magában foglalja az összes különböző visszacsatolás (vagy termék) csoportosítását egy módszerben (az egyszerű gyárban), és a megfelelő visszacsatolás kiválasztását egy paraméter alapján.

nyilvánososztályFeedbackReportFactory{

nyilvános Visszacsatolás visszajelzést(Karakterlánc-visszajelzés típusa){
Visszajelzés = nulla;

ha(feedbackType.equals("email")) {
visszajelzés = új EmailFeedback();
}másha (feedbackType.equals("levél")) {
visszajelzés = új MailFeedback();
}másha (feedbackType.equals("szociális")) {
visszajelzés = új SocialMediaFeedback();
}
Visszatérés Visszacsatolás;
}
}

Az egyszerű gyári megközelítés azonban nem a gyári tervezési minta, és nem is tervezési minta. Ez inkább egy tervezési koncepció.

A gyári módszer

A gyári módszer a tervezési minta valódi ábrázolása. Gyári módszerrel a reformált FeedbackReportFactoryJava osztály most a következő kódot tartalmazza:

nyilvánosabsztraktosztályFeedbackReportFactory{
nyilvánosabsztraktüresmakeFeedbackReport(Visszajelzés visszajelzés);
}

A gyári tervezési minta szerkezetét a következő osztálydiagrammal határozhatja meg:

A fenti diagramból láthatja, hogy egy absztrakt osztály (vagy interfész) a gyári metódus absztrakt változatát fogja tartalmazni. Tehát az absztrakt osztályt kiterjesztő konkrét gyári osztályok a gyári módszert fogják megvalósítani, olyan tulajdonságokat használva, amelyek egyediek a létrehozni kívánt termékre. Azt is meg kell jegyezni, hogy minden betongyári osztálynak egy vagy több terméket kell létrehoznia.

A minta alkalmazás három kapcsolódó, de egyedi terméket tartalmaz. Minden visszajelzéstípusnak legalább egy egyedi tulajdonsága van. Tehát az alkalmazásnak három betongyárral kell rendelkeznie minden termék elkészítéséhez.

E-mail Visszajelzés Factory

nyilvánososztályE-mail-Visszajelzési jelentéskiterjedFeedbackReportFactory{

Visszajelzés e-mailben;

@Felülbírálás
nyilvánosüresmakeFeedbackReport(Visszajelzés visszajelzés){

ez.feedback = (EmailFeedback) visszajelzés;

Rendszer.ki.println("\nJelentésMertVisszacsatolásKeresztülEmail" +
"\nElbíráló neve: " +ez.feedback.getReviewerName() +
"\nVisszajelzés: " + ez.feedback.getReviewMessage() +
"\nÉrtékelések: " + ez.feedback.getReviewRatings() +
"\nEmail-cím: " + ez.feedback.getReviewerEmail());
}
}

Mail Feedback Factory

nyilvánososztályMailFeedback ReportkiterjedFeedbackReportFactory{
MailFeedback visszajelzés;

@Felülbírálás
nyilvánosüresmakeFeedbackReport(Visszajelzés visszajelzés){
ez.feedback = (MailFeedback) visszajelzés;

Rendszer.ki.println("\nJelentésMertVisszacsatolásKeresztülLevél" +
"\nElbíráló neve: " +ez.feedback.getReviewerName() +
"\nVisszajelzés: " + ez.feedback.getReviewMessage() +
"\nÉrtékelések: " + ez.feedback.getReviewRatings() +
"\nLevelezési cím: " + ez.feedback.getReturnAddress());
}
}

Social Media Feedback Factory

nyilvánososztálySocialMediaFeedbackReportkiterjedFeedbackReportFactory{
SocialMediaFeedback visszajelzés;

@Felülbírálás
nyilvánosüresmakeFeedbackReport(Visszajelzés visszajelzés){
ez.feedback = (SocialMediaFeedback) visszajelzés;

Rendszer.ki.println("\nJelentésMertVisszacsatolásKeresztülSzociálisMédia" +
"\nElbíráló neve: " + ez.feedback.getReviewerName() +
"\nVisszajelzés: " + ez.feedback.getReviewMessage() +
"\nÉrtékelések: " + ez.feedback.getReviewRatings() +
"\nReviewer Social Media Handle: " + ez.feedback.getReviewerHandle());
}
}

A minta alkalmazás tesztelése

Mostantól a megfelelő gyári módszerekkel miniatűr jelentéseket készíthet a különböző csatornákról kapott visszajelzésekről. tudsz tesztelje az alkalmazást a JUnit segítségével, vagy létrehozhat egy járművezetői osztályt:

nyilvánososztály{

nyilvánosstatikusüresfő-(String[] args){
Visszajelzés = új e-mail visszajelzés ("Nick", "Szuper termék!", 5, "[email protected]");
Visszajelzési visszajelzés2 = új MailFeedback("János", "A termék jó, de nem olyan, amit rendszeresen vásárolnék.", 4, "első utca");
Visszajelzés3 = új SocialMediaFeedback("Jane", "Nem nekem való", 2, "@janey");

FeedbackReportFactory factory = új EmailFeedbackReport();
FeedbackReportFactory factory2 = új MailFeedbackReport();
FeedbackReportFactory factory3 = új SocialMediaFeedbackReport();

gyár.makeFeedbackReport(Visszacsatolás);
gyár 2.makeFeedbackReport(visszajelzés2);
gyári 3.makeFeedbackReport(visszajelzés3);
}

A fenti fő osztály a megfelelő gyárakat használja három jelentés létrehozásához, amelyek a következő kimenetet állítják elő a konzolon:

A gyári tervezési minta használatának előnyei

A gyári tervezési minta elősegíti a tervezés rugalmasságát, ahol interfészek (vagy absztrakt osztályok) segítségével konkrét osztályokat hozhat létre. A polimorfizmus révén elősegíti a méretezhetőséget is, lehetővé téve az új osztályok számára, hogy megvalósítsák a meglévő felületet, ahogy az alkalmazás bővül.

Ha a gyári tervezési mintát használja, akkor két fontos tervezési elvet alkalmaz: a nyitott-zárást és a vezérlés megfordítását (IoC).