نمط تصميم المصنع (أو طريقة المصنع) متخصص في التفويض والتغليف. يسمح هذا النمط للفئة الفائقة بإرجاء إنشاء مثيل للفئات الفرعية. هذا لأن الفئة التي تحتوي على نمط أسلوب المصنع الأساسي هي فئة مجردة.
يفترض الإصدار الأصلي من طريقة المصنع شكل طريقة غير مطبقة لأنها لا تعرف المنتج الذي ستنشئه. قد تعلم طريقة المصنع أنها تنشئ بعض المنتجات ، لكنها لا تعرف الخصائص المحددة للمنتج الذي ستنشئه. هذه المعرفة متاحة فقط للفئات الفرعية المعنية. لذلك ، فإن مسؤولية تنفيذ طريقة المصنع وإنشاء كائنات مناسبة هي مسؤولية فئة فرعية فقط.
تنفيذ نموذج تصميم المصنع بجافا
تستخدم هذه المقالة نموذجًا لتطبيق إنشاء تقارير الملاحظات. يستخدم هذا التطبيق الأنواع المختلفة من التعليقات التي تتلقاها الشركة (لوجبة خفيفة جديدة) لإنشاء تقارير محددة (باستخدام طريقة المصنع). لذلك ، سيُنشئ نمط المصنع ملاحظات محددة (أو تقرير ملاحظات) ، باستخدام فئة المنتج الأساسية التالية كقاعدة:
عامخلاصةفصلتعليق{
خاص خيط الاسم ؛
خاص خيط مراجعة
خاصint مراجعة التقييمات ؛
عامتعليق(اسم المراجع السلسلة ، رسالة مراجعة السلسلة ، int مراجعة التقييمات){
هذا.reviewerName = reviewerName ؛
هذا.reviewMessage = reviewMessage؛
هذا.reviewRatings = reviewRatings ؛
}
عام خيط getReviewerName(){
يعود الاسم ؛
}
عامفارغsetReviewerName(String reviewerName){
هذا.reviewerName = reviewerName ؛
}
عام خيط getReviewMessage(){
يعود مراجعة
}
عامفارغsetReviewMessage(رسالة مراجعة السلسلة){
هذا.reviewMessage = reviewMessage؛
}
عامintgetReviewRatings(){
يعود مراجعة التقييمات ؛
}
عامفارغsetReviewRatings(int مراجعة التقييمات){
هذا.reviewRatings = reviewRatings ؛
}
}
سيكون لكل تعليق ثلاث خصائص إلزامية ، اسم المراجع ، ورسالة مراجعة ، وتقييم رقمي (من واحد إلى خمسة) للوجبة الخفيفة الجديدة. ستأتي الأنواع المختلفة من التعليقات التي ستتلقاها الشركة من إحدى القنوات الثلاث:
فئة ملاحظات البريد الإلكتروني
عامفصلالبريد الإلكترونييمتدتعليق{
خاص خيط المراجع
البريد الإلكتروني العامخيط الاسم ، خيط مراجعة الرسالة ، التقييمات الدولية ، خيط المراجع
ممتاز(اسم المراجع ، مراجعة الرسالة ، التقييمات التقييمات) ؛
هذا.reviewerEmail = reviewerEmail ؛
}
عام خيط getReviewerEmail(){
يعود المراجع
}
عامفارغsetReviewerEmail(سلسلة المراجعين البريد الإلكتروني){
هذا.reviewerEmail = reviewerEmail ؛
}
}
فئة ملاحظات البريد
عامفصلMailFeedbackيمتدتعليق{
خاص خيط اعد العنوان؛
ملاحظات البريد العامة (خيط الاسم ، خيط مراجعة الرسالة ، التقييمات الدولية ، خيط اعد العنوان) {
ممتاز(اسم المراجع ، مراجعة الرسالة ، التقييمات التقييمات) ؛
هذا.returnAddress = returnAddress ؛
}عام خيط getReturnAddress(){
يعود اعد العنوان؛
}
عامفارغsetReturnAddress(عنوان إرجاع السلسلة){
هذا.returnAddress = returnAddress ؛
}
}
فئة ملاحظات وسائل التواصل الاجتماعي
عامفصلSocialMediaFeedbackيمتدتعليق{
خاص خيط المراجع
وسائل الإعلام الاجتماعية العامةخيط الاسم ، خيط مراجعة الرسالة ، التقييمات الدولية ، خيط المراجع) {
ممتاز(اسم المراجع ، مراجعة الرسالة ، التقييمات التقييمات) ؛
هذا.reviewerHandle = reviewerHandle ؛
}
عام خيط getReviewerHandle(){
يعود المراجع
}
عامفارغsetReviewerHandle(سلسلة المراجعين Handle){
هذا.reviewerHandle = reviewerHandle ؛
}
}
ستلاحظ أن كل فئة فرعية للتعليقات لها خاصية فريدة. هذا يعني أنك ستحتاج إلى إنشاء تقرير لكل نوع ملاحظات باستخدام خاصية واحدة على الأقل فريدة لهذا النوع.
المصنع البسيط
المصنع البسيط هو نهج شائع لاستخدام نمط تصميم المصنع. يستلزم هذا النهج تجميع جميع التعليقات (أو المنتجات) المختلفة في طريقة (المصنع البسيط) واختيار التعليقات المناسبة بناءً على معلمة.
عامفصلتقرير عن المصنع{
عام تعليق جعل ردود الفعل(نوع سلسلة التعليقات){
ملاحظات ردود الفعل = باطل;
لو(feedbackType.equals ("بريد إلكتروني")) {
ردود الفعل = جديد EmailFeedback () ،
}آخرلو (feedbackType.equals ("بريد")) {
ردود الفعل = جديد MailFeedback () ،
}آخرلو (feedbackType.equals ("اجتماعي")) {
ردود الفعل = جديد SocialMediaFeedback () ،
}
يعود تعليق؛
}
}
ومع ذلك ، فإن نهج المصنع البسيط ليس نمط تصميم المصنع ، ولا هو نمط تصميم. إنه أشبه بمفهوم التصميم.
طريقة المصنع
طريقة المصنع هي التمثيل الحقيقي لنمط التصميم. باستخدام طريقة المصنع ، تم إصلاحه تقرير عن المصنعفئة جافا سيحتوي الآن على الكود التالي:
عامخلاصةفصلتقرير عن المصنع{
عامخلاصةفارغجعل ردود الفعل تقرير(ردود الفعل ردود الفعل);
}
يمكنك تحديد هيكل نموذج تصميم المصنع باستخدام مخطط الفئة التالي:
من الرسم البياني أعلاه ، سترى أن فئة مجردة (أو واجهة) ستحتوي على نسخة مجردة من طريقة المصنع. لذلك ، فإن فئات المصنع الخرسانية التي تمدد فئة الملخص ستطبق طريقة المصنع ، باستخدام خصائص فريدة للمنتج الذي يريد إنشاءه. يجب أيضًا ملاحظة أن أي فئة مصنع خرسانية يجب أن تنشئ منتجًا واحدًا أو أكثر.
يحتوي تطبيق العينة على ثلاثة منتجات مترابطة ولكنها فريدة من نوعها. يحتوي كل نوع من التعليقات على خاصية فريدة واحدة على الأقل. لذلك ، سيحتاج التطبيق إلى ثلاثة مصانع خرسانة لبناء كل منتج.
مصنع ملاحظات البريد الإلكتروني
عامفصلEmailFeedbackReportيمتدتقرير عن المصنع{
ملاحظات ردود الفعل.
@تجاوز
عامفارغجعل ردود الفعل تقرير(ردود الفعل ردود الفعل){
هذا.feedback = ملاحظات (EmailFeedback) ؛
نظام.خارج.println("\nReportلتعليقعبربريد إلكتروني" +
"\ n اسم المستعرض:" +هذا.feedback.getReviewerName () +
"\ n ملاحظات:" + هذا.feedback.getReviewMessage () +
"\ n التقييمات:" + هذا.feedback.getReviewRatings () +
"\ n العنوان الأصلي:" + هذا.feedback.getReviewerEmail ()) ،
}
}
مصنع ملاحظات البريد
عامفصلMailFeedbackReportيمتدتقرير عن المصنع{
ملاحظات MailFeedback ؛
@تجاوز
عامفارغجعل ردود الفعل تقرير(ردود الفعل ردود الفعل){
هذا.feedback = ملاحظات (MailFeedback) ؛
نظام.خارج.println("\nReportلتعليقعبربريد" +
"\ n اسم المستعرض:" +هذا.feedback.getReviewerName () +
"\ n ملاحظات:" + هذا.feedback.getReviewMessage () +
"\ n التقييمات:" + هذا.feedback.getReviewRatings () +
"\ n عنوان المراسلة:" + هذا.feedback.getReturnAddress ()) ،
}
}
مصنع ملاحظات وسائل التواصل الاجتماعي
عامفصلSocialMediaFeedbackReportيمتدتقرير عن المصنع{
ملاحظات SocialMediaFeedback ؛
@تجاوز
عامفارغجعل ردود الفعل تقرير(ردود الفعل ردود الفعل){
هذا.feedback = ملاحظات (SocialMediaFeedback) ؛
نظام.خارج.println("\nReportلتعليقعبراجتماعيوسائط" +
"\ n اسم المستعرض:" + هذا.feedback.getReviewerName () +
"\ n ملاحظات:" + هذا.feedback.getReviewMessage () +
"\ n التقييمات:" + هذا.feedback.getReviewRatings () +
"\ n معالج الوسائط الاجتماعية للمراجع:" + هذا.feedback.getReviewerHandle ()) ،
}
}
اختبار تطبيق العينة
يمكنك الآن استخدام طرق المصنع ذات الصلة لعمل تقارير مصغرة عن التعليقات الواردة من القنوات المختلفة. أنت تستطيع اختبر التطبيق باستخدام JUnit، أو يمكنك إنشاء فئة سائق:
عامفصلرئيسي{
عامثابتةفارغرئيسي(سلسلة [] args){
ملاحظات ردود الفعل = جديد البريد الإلكتروني"نيك", "منتج رائع!", 5, "[email protected]");
ردود الفعل feedback2 = جديد MailFeedback ("جون", "المنتج جيد ولكن ليس شيئًا سأشتريه بانتظام", 4, "الشارع الأول");
feedback3 = جديد SocialMediaFeedback ("جين", "انها ليست لي", 2, "janey");
feedbackReportFactory مصنع = جديد EmailFeedbackReport () ،
ردود الفعل ReportFactory factory2 = جديد MailFeedbackReport () ،
ردود الفعل ReportFactory factory3 = جديد SocialMediaFeedbackReport () ،
مصنع.makeFeedbackReport(تعليق);
مصنع 2.makeFeedbackReport(ردود الفعل 2);
مصنع 3.makeFeedbackReport(ردود الفعل 3);
}
تستخدم الفئة الرئيسية أعلاه المصانع المعنية لإنشاء ثلاثة تقارير ، مما ينتج عنه الإخراج التالي في وحدة التحكم:
مزايا استخدام نموذج تصميم المصنع
يعزز نمط تصميم المصنع مرونة التصميم ، حيث تستخدم واجهات (أو فئات مجردة) لإنشاء فئات ملموسة. كما أنه يعزز قابلية التوسع من خلال تعدد الأشكال ، من خلال السماح للفئات الجديدة بتنفيذ الواجهة الحالية مع توسع التطبيق.
عند استخدام نموذج تصميم المصنع ، فأنت تستخدم مبدأين مهمين من مبادئ التصميم: Open-Closed و Inversion of Control (IoC).