الوكيل (Proxy)، في شكله الأكثر عمومية، هو فئة تعمل بمثابة واجهة لشيء آخر.[1] الوكيل يمكن ان يكون واجهة لأي شيء: اتصال بالشبكة، كائن كبير في الذاكرة، ملف، أو بعض الموارد الأخرى التي هي مكلفة أو من المستحيل تكررارها.
في الحالات التي يكون فيها نسخ متعددة من كائن معقد يجب أن تتواجد، يمكن تبني نمط الوكيل لإدماج نموذج (نمط) وزن الذبابة من أجل الحد من بصمة الذاكرة للتطبيق. وعادة نسخه واحده من الكائن المعقد يتم إنشاؤه، وكائنات وكيل متعددة يتم إنشاؤها، وجميعها تتضمن إشارة إلى كائن معقد اصلي واحد. أي عملية تجرى على وكلاء تحال إلى الكائن الأصلي. عندما تكون جميع نسخح الوكيل(Proxy) هي خارج النطاق، يمكن مسح الكائن من الذاكرة.
مثال
المثال التالي في الجافا يوضح نمط الوكيل(Proxy) «الافتراضي». والفئة ProxyImage يستخدم للوصول إلى طريقة نائية.
importjava.util.*;interfaceImage{publicvoiddisplayImage();}//on System A classRealImageimplementsImage{privateStringfilename;publicRealImage(Stringfilename){this.filename=filename;loadImageFromDisk();}privatevoidloadImageFromDisk(){System.out.println("Loading "+filename);}publicvoiddisplayImage(){System.out.println("Displaying "+filename);}}//on System B classProxyImageimplementsImage{privateStringfilename;privateImageimage;publicProxyImage(Stringfilename){this.filename=filename;}publicvoiddisplayImage(){image=newRealImage(filename);image.displayImage();}}classProxyExample{publicstaticvoidmain(String[]args){Imageimage1=newProxyImage("HiRes_10MB_Photo1");Imageimage2=newProxyImage("HiRes_10MB_Photo2");image1.displayImage();// loading necessaryimage2.displayImage();// loading necessary}}