تصف هذه المقالة وضع الوكيل الديناميكي لنمط تصميم Java. شاركه للرجوع إليه ، على النحو التالي:
تم تقديم وضع الوكيل الثابت في وقت سابق ، والوكالة الديناميكية أقوى من وضع الوكيل الثابت. يمكن أن يولد كائنات الوكيل ديناميكيًا عند تشغيل البرنامج. ما يسمى فئة الوكيل الديناميكي هي فئة تم إنشاؤها في وقت التشغيل. عند توليده ، يجب عليك توفير مجموعة من الواجهات لها ، ويدعي فئة الوكيل الديناميكي أنها تنفذ هذه الواجهات. بالطبع ، تعمل فئة الوكيل الديناميكية كبديل. لا تحاول مساعدتك في القيام بعمل كبير. عند إنشاء مثيلها ، يجب عليك توفير معالج وسيتولى العمل الفعلي.
دور الوكيل الديناميكي هو نفس دور الوكيل الثابت:
① الدور التجريدي: واجهة مشتركة بين الكائنات الحقيقية والكائنات الوكيل. ما يجب القيام به في إعلان الأشياء الحقيقية والكائنات الوكيل.
② الدور الحقيقي: تنفيذ الأدوار المجردة ، وتحديد منطق العمل الذي سيتم تنفيذه من خلال الدور الحقيقي ، ويتم استدعاؤه من خلال دور الوكيل.
③ دور الوكيل الديناميكي: يجب تنفيذ واجهة InvocationHandler وتنفيذ طريقة Invoke. يشعر الوكيل الديناميكي بأنه يحمل مرجع نوع الكائن ، مما يشير إلى الدور الذي يتطلب الوكيل الديناميكي. يُعرّف بأنه نوع الكائن ، مما يعني أن أي نوع من الكائن يمكن أن يكون مهيئًا ديناميكيًا.
فيما يلي مثال رمز بسيط لنمط وكيل ديناميكي بسيط:
1. الدور التجريدي : واجهة مشتركة بين الكائنات الحقيقية والكائنات الوكيل. ما يجب القيام به في إعلان الأشياء الحقيقية والكائنات الوكيل.
package com.tydic.dynamicproxy ؛ واجهة عامة موضوع {public void request () ؛}2. الدور الحقيقي : يجب تنفيذ دور مجردة ، وهو كائن ليكون وكيل.
package com.tydic.dynamicproxy ؛ الطبقة العامة realSubject تنفذ الموضوع {Override public void request () {system.out.println ("من الموضوع الحقيقي!") ؛ }} 3. دور الوكيل الديناميكي : تحتاج إلى تنفيذ واجهة InvocationHandler وإعادة كتابة طريقة الاستدعاء في public Object invoke(Object proxy, Method method, Object[] args) . طريقة Invoke لديها ثلاث معلمات. يشير وكيل المعلمة إلى فئة الوكيل ، ويمثل الطريقة طريقة الوكيل ، و args هي صفيف المعلمة في الطريقة ، وكائن قيمة الإرجاع هو القيمة التي يتم إرجاعها بواسطة طريقة استدعاء طريقة الوكيل. يتم تنفيذ هذه الطريقة التجريدية ديناميكيًا في فئة الوكيل.
package com.tydic.dynamicproxy ؛ import java.lang.reflect.invocationHandler ؛ import java.lang.reflect.method ؛ public class dynamicsubject paricements invocationHandler {private object sub ؛ // Agent DynamicSubject (object obj) {this.sub = obj ؛ } Override public object invoke (Proxy Object ، method method ، Object [] args) remable {system.out.println ("قبل الاتصال:" + طريقة) ؛ // يمكن إضافة الوظيفة قبل وبعد طريقة الوكيل. invoke (sub ، args) ؛ System.out.println ("بعد الاتصال:" + طريقة) ؛ العودة لاغية. }} 4. اكتب رمز العميل : مطلوب فئة وكيل. الفئة الأصل لجميع فئات الوكيل الديناميكية من فئة الوكيل ، توفر طرقًا ثابتة لإنشاء فئات ومحالات بالوكالة ديناميكية. تحتوي فئة الوكيل على طريقة ثابتة public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) . تمثل المعلمة الأولى محمل الفئة لفئة الوكيل الديناميكي ، والثاني هو صفيف الفئة من الواجهة التي يجب أن تنفذها فئة الوكيل الديناميكي ، والمعلمة الثالثة هي كائن InvocationHandler. عندما يستدعي الوكيل الديناميكي الطريقة التي تتطلب الوكيل ، سيتم استدعاء طريقة الاستدعاء لكائن InvocationHandler.
package com.tydic.dynamicproxy ؛ import java.lang.reflect.proxy ؛ client client client {public static void main (string [] args) {موضوع = جديد realSubject () ؛ DynamicSubject Handle = New DynamicSubject (الموضوع) ؛ // Generation Generation Proxy Object sub = (thision) proxy.newproxyinstance (DynamicSubject.class.getClasslader () ، thision.getClass (). getInterfaces () ، handle) ؛ sub.request () ؛ // تسمى طريقة الاستدعاء للمقبض فعليًا}}لمزيد من المحتوى المتعلق بـ Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "مقدمة والبرمجة التعليمية المتقدمة حول البرمجة الموجهة إلى Java" ، و "البرنامج التعليمي حول بنية بيانات Java" و "خوارزمية" و "ملخص مهارات تشغيل Java" ، و "ملخص مهارات تشغيل Java" و "ملخصات Java Cate".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.