تم شرح الوكيل الديناميكي Java على واجهة برمجة التطبيقات المتصلة بـ Java ، لذلك لن أكتبه هنا. ما أفهمه:
تمديد وظيفة طريقة محددة في واجهة محددة ، وهذا هو الوكيل. الوكيل هو طريقة استدعاء من خلال كائن معالج المكالمات المرتبط بمثال وكيل.
دعونا نلقي نظرة عليه مع مثال:
الواجهة:
الواجهة العامة num {void show () ؛ int getNum () ؛ int getProduct (int x) ؛} فئة التنفيذ:
الطبقة العامة mynum تنفذ num {Override public int getNum () {return 3 ؛ } Override public getProduct (int x) {return x ؛ } Override public void show () {system.out.println ("الطريقة الأساسية تطبع الرقم 99") ؛ }} دعونا نلقي نظرة أولاً على كيفية وصف طريقة الاستدعاء في واجهة برمجة التطبيقات
وهذا يعني أن معالج المكالمات يستدعي الطريقة الأساسية التي تمثل كائن الطريقة إلى كائن فئة التنفيذ في الواجهة.
الطريقة الأولى لتنفيذ الوكيل:
الفئة العامة numproxy {private object num ؛ // إنشاء كائن فئة التنفيذ للواجهة من خلال طريقة المنشئ العامة numproxy (كائن num) {this.num = num ؛ } كائن عام getNumbyProxy () {Object numproxy = proxy.newproxyinstance (num.getClass (). هي مجموعة المعلمة من الأساليب الحقيقية*/ Override الكائنات العامة (Complet Proxy ، الكائن [] args) (Integer) OBJ * 2 ؛ إرجاع numproxy. }} الطريقة الثانية لتنفيذ الوكيل: من خلال تنفيذ واجهة InvocationHandler
الطبقة العامة numproxyimpl تنفذ invocationHandler {// هنا لقد قمت بتخليص نوع الواجهة ، ولا يتم كتابتها ككائن خاص num ؛ العام numproxyimpl (num num) {this.num = num ؛ } Override الكائن العام استدعاء (وكيل الكائن ، طريقة الطريقة ، الكائن [] args) يلقي رمي {Object obj = null ؛ سلسلة methodName = method.getName () ؛ if ("getProduct" .equals (methodName)) {system.out.println ("proxy: getProduct () start") ؛ obj = method.invoke (num ، args) ؛ OBJ = (عدد صحيح) OBJ * 2 ؛ system.out.println ("proxy: getProduct () end") ؛ } آخر إذا ("show" .equals (methodName)) {system.out.println ("proxy: show () start") ؛ obj = method.invoke (num ، args) ؛ system.out.println ("proxy: show () end") ؛ } إرجاع OBJ ؛ }} رمز الاختبار:
الفئة العامة testnum {public static void main (string [] args) {// test numproxy np = new numproxy (new mynum ()) ؛ num numproxy = (num) np.getNumbyProxy () ؛ int x = numproxy.getProduct (2) ؛ system.out.println (x) ؛ numproxy.show () ؛ System.out.println ("-------------------") ؛ numproxyimpl npi = new numproxyimpl (myNum () جديد) ؛ num numpro = (num) proxy.newproxyinstance (num.class.getClassLoader () ، فئة جديدة [] {num.class} ، npi) ؛ int n = numpro.getProduct (3) ؛ system.out.println (n) ؛ numpro.show () ؛ }} نتائج وحدة التحكم:
الطريقة الثانية مرتبكة بعض الشيء. لا أعرف إذا كان لديك ذلك. أي أنه يطلق عليه طريقة Invoke في Numproxyimpl التي لم يتم عرضها ، ولكن تم تنفيذها. نعم ، دعنا ننزل لرؤية هذا.
إذا كنت لا تريد أن تكون مزعجًا ، فقط تذكر ذلك.
على سبيل المثال ، يمكن استخدام عملية الترميز لاستخدام الوكيل ، وكتابة مثال في المرة القادمة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.