Latest web development tutorials

نمط خدمة محدد

نمط خدمة محدد (خدمة محدد نمط) لاستخدامها في تحديد المواقع ونحن نريد أن استخدام خدمات JNDI بحث متى. مع الأخذ بعين الاعتبار JNDI بحث ثمنا باهظا لخدمة، وخدمة محدد نمط الاستخدام الكامل للتكنولوجيا التخزين المؤقت. في أول طلب للحصول على الخدمة، وخدمة في خدمة تحديد المواقع JNDI البحث، وتخزين كائن خدمة. عند طلب نفس الخدمة مرة أخرى، وتحديد مواقع خدمة يبدو في ذاكرة التخزين المؤقت، والتي يمكن أن تحسن أداء التطبيق إلى حد كبير. ما يلي هو كيان من هذا النمط التصميم.

  • خدمة (خدمة) - خدمات التعامل مع الواقع الطلب.ما يشير إلى هذه الخدمات يمكن العثور على الخادم JNDI.
  • السياق / سياق الأولي - JNDI السياق مع الخدمة التي تريد ايجاد مرجعية.
  • تحديد مواقع الخدمة (خدمة محدد) - خدمة تحديد المواقع من خلال خدمات البحث والتخزين المؤقت JNDI للحصول على نقطة واحدة من خدمة الاتصال.
  • ذاكرة التخزين المؤقت (الكاش) - في إشارة إلى خدمات التخزين ذاكرة التخزين المؤقت، من أجل إعادة استخدامها.
  • العميل (العميل) - العميل الاحتجاج الهدف من الخدمة من خلال ServiceLocator.

تحقيق

فإننا سنضعServiceLocator،InitialContext، ذاكرة التخزين المؤقت، الخدمة كما يمثل كيان الكائنات المختلفة.Service1وService2 تمثل الخدمات الكيان.

ServiceLocatorPatternDemo،طبقتنا عرض هنا كعميل، وسوف تستخدم لإثبات خدمةServiceLocatorنمط تصميم المواقع.

نمط خدمة محدد UML الرسم البياني

خطوة 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