نمط خدمة محدد
نمط خدمة محدد (خدمة محدد نمط) لاستخدامها في تحديد المواقع ونحن نريد أن استخدام خدمات JNDI بحث متى. مع الأخذ بعين الاعتبار JNDI بحث ثمنا باهظا لخدمة، وخدمة محدد نمط الاستخدام الكامل للتكنولوجيا التخزين المؤقت. في أول طلب للحصول على الخدمة، وخدمة في خدمة تحديد المواقع JNDI البحث، وتخزين كائن خدمة. عند طلب نفس الخدمة مرة أخرى، وتحديد مواقع خدمة يبدو في ذاكرة التخزين المؤقت، والتي يمكن أن تحسن أداء التطبيق إلى حد كبير. ما يلي هو كيان من هذا النمط التصميم.
- خدمة (خدمة) - خدمات التعامل مع الواقع الطلب.ما يشير إلى هذه الخدمات يمكن العثور على الخادم JNDI.
- السياق / سياق الأولي - JNDI السياق مع الخدمة التي تريد ايجاد مرجعية.
- تحديد مواقع الخدمة (خدمة محدد) - خدمة تحديد المواقع من خلال خدمات البحث والتخزين المؤقت JNDI للحصول على نقطة واحدة من خدمة الاتصال.
- ذاكرة التخزين المؤقت (الكاش) - في إشارة إلى خدمات التخزين ذاكرة التخزين المؤقت، من أجل إعادة استخدامها.
- العميل (العميل) - العميل الاحتجاج الهدف من الخدمة من خلال ServiceLocator.
تحقيق
فإننا سنضعServiceLocator،InitialContext، ذاكرة التخزين المؤقت، الخدمة كما يمثل كيان الكائنات المختلفة.Service1وService2 تمثل الخدمات الكيان.
ServiceLocatorPatternDemo،طبقتنا عرض هنا كعميل، وسوف تستخدم لإثبات خدمةServiceLocatorنمط تصميم المواقع.
خطوة 1
إنشاء خدمة واجهة الخدمة.
Service.java
الواجهة العمومية خدمة { جمهور سلسلة getName ()؛ تنفيذ الفراغ العام ()؛ }
خطوة 2
إنشاء خدمة الكيان.
Service1.java
الطبقة العامة Service1 تنفذ خدمة { الفراغ العام تنفيذ () { System.out.println ( "تنفيذ Service1")؛ } Override جمهور سلسلة getName () { العودة "Service1". } }
Service2.java
الطبقة العامة Service2 تنفذ خدمة { الفراغ العام تنفيذ () { System.out.println ( "تنفيذ Service2")؛ } Override جمهور سلسلة getName () { العودة "Service2". } }
خطوة 3
إنشاء الاستعلام عن JNDI InitialContext.
InitialContext.java
الطبقة العامة InitialContext { بحث كائن العام (سلسلة jndiName) { إذا (jndiName.equalsIgnoreCase ( "SERVICE1")) { System.out.println ( "تبحث صعودا وخلق كائن Service1 الجديد")؛ العودة Service1 جديد ()؛ } آخر إذا (jndiName.equalsIgnoreCase ( "SERVICE2")) { System.out.println ( "تبحث صعودا وخلق كائن Service2 الجديد")؛ العودة Service2 الجديدة ()؛ } العودة فارغة؛ } }
خطوة 4
إنشاء ذاكرة التخزين المؤقت ذاكرة التخزين المؤقت.
Cache.java
استيراد java.util.ArrayList. استيراد java.util.List. فئة العمومي ذاكرة التخزين المؤقت { قائمة <خدمة> خدمات خاصة. الكاش العام () { خدمات = جديد ArrayList <خدمة> ()؛ } خدمة getService الجمهور (سلسلة اسم الخدمة) { ل(خدمة: الخدمات) { إذا (service.getName (). equalsIgnoreCase (اسم الخدمة)) { System.out.println ( "العودة مؤقتا" + اسم الخدمة + "وجوه")؛ عودة الخدمة؛ } } العودة فارغة؛ } addService الفراغ الجمهور (خدمة newService) { منطقية موجود = كاذبة. ل(خدمة: الخدمات) { إذا (service.getName (). equalsIgnoreCase (newService.getName ())) { موجود = صحيح. } } إذا (! موجودا) { services.add (newService)؛ } } }
خطوة 5
إنشاء المواقع الخدمة.
ServiceLocator.java
الطبقة العامة ServiceLocator { خاص مخبأ مخبأ ثابت. ثابت { مخبأ = مخبأ جديد ()؛ } خدمة ثابتة عامة getService (سلسلة jndiName) { خدمة = cache.getService (jndiName)؛ إذا (خدمة! = فارغة) { عودة الخدمة؛ } InitialContext السياق = جديد InitialContext ()؛ service1 الخدمة = (خدمة) context.lookup (jndiName)؛ cache.addService (service1)؛ العودة service1. } }
خطوة 6
استخدامServiceLocatorللتدليل على نمط تصميم خدمة تحديد المواقع.
ServiceLocatorPatternDemo.java
الطبقة العامة ServiceLocatorPatternDemo { (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية { خدمة = ServiceLocator.getService ( "Service1")؛ service.execute ()؛ خدمة = ServiceLocator.getService ( "Service2")؛ service.execute ()؛ خدمة = ServiceLocator.getService ( "Service1")؛ service.execute ()؛ خدمة = ServiceLocator.getService ( "Service2")؛ service.execute ()؛ } }
خطوة 7
تحقق من الانتاج.
يبحث حتى وخلق كائن Service1 جديد تنفيذ Service1 يبحث حتى وخلق كائن Service2 جديد تنفيذ Service2 وبالعودة مؤقتا الكائن Service1 تنفيذ Service1 وبالعودة مؤقتا الكائن Service2 تنفيذ Service2