تصف هذه المقالة مشكلة حل توزيع النبيذ الأحمر استنادًا إلى نموذج وكيل Java. شاركه للرجوع إليه ، على النحو التالي:
1. تعريف نمط
في وضع الوكيل ، يشارك كائنان في معالجة نفس الطلب. يتم تكليف الطلب المستلم من قبل كائن الوكيل إلى الكائن الحقيقي للمعالجة. يتحكم كائن الوكيل في الوصول إلى الطلب ، الذي يلعب جسرًا وسيطًا بين تطبيق العميل والكائن الحقيقي. يستخدم وضع الوكيل تجميع الكائنات بدلاً من الميراث ، مما يقلل بشكل فعال من الاقتران بين وحدات البرامج.
2. أمثلة نموذجية
1 تحليل نمط
نحن نقترض توزيع النبيذ لتوضيح هذا النموذج.
2 الوكيل وضع الفئة الثابت
3 أمثلة رمز
3.1 واجهة مصنع النبيذ الأحمر 1 Iredwine
حزمة com.demo.real ؛/** * واجهة النبيذ الأحمر * * author * */الواجهة العامة ايردوين {// طريقة إنتاج Red Wine Public Void Product () ؛ // طريقة بيع Wine Public Void Sell () ؛}3.2 إدراك realredwinefactory في مصنع النبيذ الأحمر
package com.demo.real.impl ؛ استيراد com.demo.real.iredwine ؛/** * مصنع إنتاج النبيذ الحقيقي * * Auuthor * */الطبقة العامة realredwinefactory الأدوات Iredwine {// method لإنتاج Red Wine Override Public Void Product () {system.out.println ( } // method لبيع Wine Public Void Sell () {system.out.println ("Red Wine Factory يبيع النبيذ الأحمر ...") ؛ }}3.3 إنشاء وكيل نبيذ أحمر - RedwineProxy
Package com.demo.proxy ؛ استيراد com.demo.real.iredwine ؛/** * وكيل النبيذ الأحمر * * Author * */الفئة العامة RedwineProxy الأدوات Iredwine {// Red Red Wine Final Final Final Iredwine Redwine ؛ // أذن الوكيل لبيع الإذن النهائي النهائي للنبيذ الأحمر = صحيح ؛ // طريقة البناء الافتراضية العامة redwineproxy (Iredwine redwine) {this.redwine = redwine ؛ } // طريقة الوكيل لإنتاج النبيذ الأحمر (لا ينتج الوكيل النبيذ الأحمر ، ويأخذ النبيذ من المصنع الحقيقي للبيع) Override Public Void Product () {// تحديد ما إذا كان العامل له الحق في أن يكون نبيذًا أحمر إذا (هذا. القبول) {// ، فإن الوكيل له الحق في بيع النبيذ الأحمر هو نظام قانوني. System.out.println ("يستقبل الوكيل أمرًا ويبلغ المصنع لإنتاج ...") ؛ this.redwine.product () ؛ } else {system.out.println ("[[هذا هو عامل نبيذ أحمر غير قانوني!]") ؛ }} // كيفية بيع النبيذ الأحمر لـ Override public void sell () {if (this.permission) {this.redwine.sell () ؛ System.out.println ("يحصل الوكيل على النبيذ الأحمر بالجملة من المصنع ويبيعه بسعر أعلى ، وكسب فرقًا معينًا منه ...") ؛ } else {system.out.println ("[[هذا هو عامل نبيذ أحمر غير قانوني!]") ؛ }}}3.4 انتقل إلى وكيل النبيذ لشراء عميل النبيذ الأحمر
package com.demo ؛ import com.demo.proxy.redwineproxy ؛ استيراد com.demo.real.real.iredwine ؛ استيراد com.demo.real.impl.riealredwinefactory ؛/** * التطبيق الرئيسي * * * at string a strendantour a strend. كائن مثيل Iredwine realredwinefactory = جديد realredwinefactory () ؛ // الحصول على مثيل كائن الوكيل Iredwine redwineproxy = جديد redwineproxy (realredwinefactory) ؛ // وكيل ينتج النبيذ الأحمر (في الواقع الإنتاج الحقيقي هو المصنع) redwineproxy.product () ؛ // Agent يبيع النبيذ الأحمر (سعر الجملة ، ثم يبيعه بسعر أعلى لكسب الفرق) redwineproxy.sell () ؛ }}
4 نتائج التشغيل
[هذا وكيل نبيذ أحمر قانوني]
تلقى الوكيل الأمر وأبلغ المصنع بإنتاج ...
مصنع النبيذ الأحمر ينتج النبيذ الأحمر ...
مصنع النبيذ الأحمر يبيع النبيذ الأحمر ...
يحصل الوكيل على النبيذ الأحمر بالجملة من المصنع ويبيعه بسعر أعلى ، ويحصل على فرق معين من السعر ...
ثالثا. مبادئ تصميم هذا النمط
1 تأخير التحميل لتحسين كفاءة النظام
2 مبدأ المسؤولية الفردية
4. استخدام المناسبات
1 الوكيل عن بُعد: يوفر وكيلًا محليًا لكائن في مساحات عناوين مختلفة.
2 الوكيل الظاهري: إذا كان إنشاء كائن يستغرق وقتًا طويلاً ، فيمكنك تسميته من خلال كائن الوكيل. قبل إنشاء الكائن الحقيقي ، يتم إرجاع مكالمة خاطئة. عند إنشاء الكائن الحقيقي ، يتم إرجاع استدعاء الطريقة المقابلة للكائن الحقيقي إلى العميل.
3 يتحكم وكيل الحماية في الوصول إلى الكائن الأصلي.
4 الإرشادات الذكية تحل محل المؤشرات البسيطة ، والتي تؤدي بعض العمليات الإضافية عند الوصول إلى الكائنات.
خامسا مخطط فئة ثابتة لوضع الوكيل
الدور التجريدي: واجهة مشتركة تعلن عن كائنات حقيقية وكائنات وكيل.
الدور الحقيقي: الكائن المستهدف الذي يعالج الطلب حقًا.
دور الوكيل: يحتوي دور كائن الوكيل على إشارات إلى كائنات حقيقية ، بحيث يمكن لكائن الوكيل تحويل الطلب إلى كائنات حقيقية للمعالجة. في الوقت نفسه ، يمكن للكائن الوكيل أيضًا إضافة عمليات إضافية قبل وبعد إجراء عملية الكائن الحقيقية.
لمزيد من المحتوى المتعلق بـ Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص Tips Java Operation DOM" ، "ملخص ملف Java ونصائح تشغيل الدليل" و "ملخص نصائح Java Cache Operation Tips"
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.