تعريف:
توفير بديل أو عنصر نائب لكائن آخر للتحكم في الوصول إليه.
وكيل للكائنات الأخرى للتحكم في الوصول إلى هذا الكائن.
الوصف العام:
يحتوي بشكل عام على ثلاثة أدوار: موضوع مجردة وموضوع ملموس وموضوع الوكيل.
مخطط الطبقة العامة:
الرمز العام:
Package Proxy ؛ // Abstract Topic Topic Class: Public Interface Office {public void dosomething () ؛} Package Presid ؛ }} Package Proxy ؛ // Proxy Topic Class Proxy Parxy Office {private subs sub = null ؛ Override public void dosomething () {this.sub.dosomething () ؛ } الوكيل العام (الموضوع الفرعي) {this.sub = sub ؛ }} Package Proxy ؛ // Client Public Client Client {public static void main (string [] args) {tource realSub = new RealSubject () ؛ الوكيل الموضوع = وكيل جديد (realSub) ؛ proxy.dosomething () ؛ }}ميزة :
1. مسؤوليات واضحة
2. التوسع العالي
امتدادات وضع الوكيل:
العامل العادي:
فئات السمات المحددة شفافة لمستويات عالية المستوى ، ويتم إنشاء فئات السمات المحددة في فئات موضوع الوكيل.
تنفيذ الكود:
حزمة GeneralProxy ؛ واجهة عامة موضوع {public void dosomething () ؛} package generalproxy ؛ الطبقة العامة realSubject تنفذ الموضوع {private string name = null ؛ Override public void dosomething () {system.out.println (this.name + "proxy ، تنفيذ منطق الأعمال ...") ؛ } public realSubject (وكيل موضوع ، اسم السلسلة) يلقي الاستثناء {if (proxy == null) {رمي استثناء جديد ("لا يمكن إنشاء كائن وكيل") ؛ } آخر {this.name = name ؛ }}} package generalproxy ؛ يقوم وكيل الطبقة العامة بتنفيذ موضوع {موضوع خاص realSub = null ؛ الوكيل العام (اسم السلسلة) {try {RealSub = new RealSubject (هذا ، الاسم) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }} public void dosomething () {realsub.dosomething () ؛ }} package generalproxy ؛ عميل الفئة العامة {public static void main (string [] args) {// proxy proxy proxy = New Proxy ("Zhang San") ؛ proxy.dosomethaing () ؛ }}
الوكيل القسري:
يجب عليك الحصول على كائن فئة Topic Proxy من خلال الوصول إلى فئة الموضوع المحددة ، ثم استخدام فئة Topic Proxy للتحكم في الوصول.
تنفيذ الكود:
حزمة mustproxy. واجهة عامة موضوع {public void dosomething () ؛ الموضوع العام getProxy () ؛} package mustproxy ؛ الطبقة العامة realSubject تنفذ الموضوع {private string name = null ؛ وكيل موضوع خاص = فارغ ؛ Override public void dosomething () {if (isProxy ()) {system.out.println (this.name + "proxy ، تنفيذ منطق الأعمال ...") ؛ } آخر {system.out.println ("الرجاء الوصول إلى الوكيل أولاً ...") ؛ }} realSubject (اسم السلسلة) {this.name = name ؛ } الموضوع العام getProxy () {proxy = new proxy (this) ؛ إرجاع this.proxy ؛ } private boolean isProxy () {if (this.proxy == null) {return false ؛ } آخر {return true ؛ }}} package mustproxy ؛ يقوم وكيل الطبقة العامة بتنفيذ موضوع {موضوع خاص realSub = null ؛ الوكيل العام (موضوع realsub) {this.realsub = realSub ؛ } public void dosomething () {this.realsub.dosomething () ؛ } الموضوع العام getProxy () {return this ؛ }} package mustproxy ؛ عميل الفئة العامة {public static void main (string [] args) {tource realSub = new RealSubject ("Zhang San") ؛ realsub.dosomething () ؛ proxy الموضوع = realsub.getProxy () ؛ proxy.dosomething () ؛ }} سيناريوهات التطبيق
في العالم الحقيقي ، يعادل الأمين وكيل. إذا كان الرئيس يعقد اجتماعًا ، ثم أبلغ الموظفين بوقت الاجتماع ، وترتيب المكان ، وفرز المكان بعد الاجتماع ، وما إلى ذلك ، يمكنك تسليم العمل المتعلق بالاجتماع إلى الأمين. يحتاج الرئيس فقط إلى عقد الاجتماع ولا يحتاج إلى القيام بهذه الأشياء شخصيًا. وبالمثل ، في برامجنا ، يمكننا أيضًا استخدام نمط الوكيل لفصل الرمز الذي يتم دمجه مع سلسلة من المنطق غير المرتبط ، مثل رمز السجل في رمز العمل يمكن تنفيذه في الوكيل. Spring's AOP هو تطبيق وكيل ديناميكي نموذجي.
نموذج تطبيق وضع الوكيل
(1) الوكيل البعيد - يمكن أن يخفي حقيقة وجود كائن في مساحات عناوين مختلفة. كما يسمح للعملاء بالوصول إلى الكائنات على الآلات البعيدة. قد يكون للآلات البعيدة أداء حوسبة أفضل وسرعة المعالجة ، ويمكن أن تستجيب بسرعة ومعالجة طلبات العميل.
(2) يتيح الوكيل الظاهري إنشاء الكائنات ذات النفقات العامة للذاكرة العالية عند الحاجة. إنشاء فقط عندما نحتاج حقا هذا الكائن.
(3) يتم استخدام وكيل النسخ على الكتاب للتحكم في نسخ الكائنات عن طريق تأخير نسخ الكائنات حتى يحتاج العميل حقًا. إنه متغير من الوكيل الظاهري.
(4) الوكيل (الوصول) الحماية) يوفر مستويات مختلفة من حقوق الوصول إلى الكائنات المستهدفة لعملاء مختلفين
(5) يوفر وكيل ذاكرة التخزين المؤقت تخزينًا مؤقتًا للنتائج الحسابية العامة. يتيح للعملاء العديد من العملاء مشاركة النتائج لتقليل الحساب أو زمن انتقال الشبكة.
(6) يتحكم وكيل جدار الحماية في الوصول إلى موارد الشبكة ويحمي الموضوع من العملاء الخبيثين.
(7) يوفر SynchronizationProxy الوصول الآمن إلى الموضوع في حالة متعدد الخيوط.
(8) الوكيل المرجعي الذكي - عند الرجوع إلى كائن ، فإنه يوفر بعض العمليات الإضافية ، مثل تسجيل عدد المكالمات على هذا الكائن ، إلخ.
(9) يتم استخدام وكيل إخفاء التعقيد لإخفاء تعقيد مجموعة معقدة من الفصل وأداء التحكم في الوصول. في بعض الأحيان يطلق عليه أيضًا وكيل الواجهة ، وهو أمر ليس من الصعب فهمه. يختلف الوكيل المعقد المخفي ووضع المظهر لأن الوكيل يتحكم في الوصول ، في حين أن وضع المظهر مختلف لأن الوكيل يتحكم في الوصول ، في حين أن وضع المظهر يوفر فقط مجموعة أخرى من الواجهات.