عندما تتعمق Java إلى مستوى معين ، فإنه سيواجه مفهوم نمط التصميم حتماً. يستخدم وضع التصميم على نطاق واسع في أنظمة Java متوسطة الحجم فقط. في أنظمة التجارة الإلكترونية ، لذلك أريد تحليل تطبيق المراقب من أمثلة التجارة الإلكترونية.
على الرغم من أن المتاجر عبر الإنترنت تتنوع في النموذج ، فإن كل موقع له خصائصه الخاصة ، إلا أن لديها قواسم مشتركة عامة. .
على وجه التحديد ، إذا تغير المنتج الموجود في المتجر عبر الإنترنت من حيث الاسم والسعر ، وإذا كان النظام يمكنه إخطار الأعضاء تلقائيًا ، فسيكون ذلك ميزة رئيسية في المتجر عبر الإنترنت الذي يميز بين المتاجر التقليدية. يتطلب ذلك إضافة دور المراقب إلى منتج المنتج ، بحيث عندما يتغير تفاصيل المنتج ، يمكن للمراقب مراقبة هذا التغيير تلقائيًا وإجراء التحديث في الوقت المناسب أو إخطار الإجراءات.
توفر لنا Java API أيضًا واجهة مراقب الجرف Java.Util.Observer. نحن فقط بحاجة إلى استخدامه مباشرة.
علينا أن نمتد java.util.observer لاستخدامه فعليًا:
1. توفير طريقة إضافة/حذف المراقب ؛
2. توفير طرق الإخطار (Notisfy) لجميع المراقبين.
نسخة الكود كما يلي:
// يمكن استخدام فئة المنتج مباشرة من قبل JSP للاتصال بالفئة باستخدام UseBean.
منتج الطبقة العامة يمتد قابلة للملاحظة {
اسم السلسلة الخاصة ؛
سعر التعويم الخاص ؛
السلسلة العامة getName () {return name ؛}
public void setName () {
this.name = name ؛
// اضبط نقطة التغيير setChanged () ؛
eletforeBservers (الاسم) ؛
}
تعويم العام getPrice () {سعر الإرجاع ؛}
public void setPrice () {
this.price = السعر ؛
// اضبط نقطة التغيير setChanged () ؛
eletforeBservers (تعويم جديد (السعر)) ؛
}
// يمكن أن يكون ما يلي هو أمر إدراج تحديث قاعدة البيانات.
public void savetodb () {
.............
}
}
لاحظنا أنه في طريقة setxxx في فئة المنتج ، قمنا بتعيين طريقة الإخطار.
فيما يلي نظرة على رموز هؤلاء المراقبين ، ما الذي أخذوه بالضبط:
نسخة الكود كما يلي:
// يستخدم Observer NameObserver بشكل أساسي لمراقبة اسم المنتج (الاسم).
اسم الفئة العامة NameObserver ينفذ Observer {
اسم السلسلة الخاصة = فارغة ؛
تحديث الفراغ العام (OBJ يمكن ملاحظته ، كائن arg) {
if (arg extryof string) {
الاسم = (سلسلة) arg ؛
// قيمة تغيير اسم المنتج في system.out.println ("nameObserver: name Change to"+name) ؛
}
}
}
// يستخدم Observer PriceObserver بشكل أساسي لمراقبة أسعار المنتجات.
الطبقة العامة PriceObserver تنفذ Observer {
سعر التعويم الخاص = 0 ؛
تحديث الفراغ العام (OBJ يمكن ملاحظته ، كائن arg) {
if (arg extironof float) {
السعر = ((تعويم) arg) .floatvalue () ؛
System.out.println ("PriceObserver: تغيير السعر إلى"+السعر) ؛
}
}
}
في JSP ، يمكننا تنفيذ برنامج المراقب هذا رسميًا:
نسخة الكود كما يلي:
<jsp: useBean id = "Product" Scope = "Session" />
<JSP: setProperty name = "Product" property = "*" />
<JSP: usebean id = "nameObs" Scope = "Session" />
<JSP: setProperty name = "Product" property = "*" />
<JSP: usebean id = "priceobs" scope = "session" />
<JSP: setProperty name = "Product" property = "*" />
<٪
if (request.getParameter ("Save")! = NULL)
{
product.savetodb () ؛
Out.println ("يتم حفظ تغييرات بيانات المنتج! وقد تم إخطار العميل تلقائيًا") ؛
}آخر{
// إضافة إلى Observer Product.addobserver (nameObs) ؛
product.addobserver (برايسوبس) ؛
٪>
//request.getRequesturi () هو اسم البرنامج الذي ينشئ هذا JSP ، مما يعني استدعاء نفسك <form action = "<٪ = request.getRequesturi () ٪>" method = post>
<إدخال نوع = hidden name = "Save" value = "1">
اسم المنتج: <إدخال type = text name = "name">
سعر المنتج: <إدخال نوع = نص = "السعر">
<نوع الإدخال = إرسال>
</form>
<٪
}
٪>
عند تنفيذ برنامج JSP ، ستظهر واجهة إدخال النماذج. من JSP.
نظرًا لأن مفهوم التعيين التلقائي للبيانات يتم استخدام Javabeans هنا ، فإن البرنامج الفعلي ينفذ تلقائيًا عبارة SETNAME SETPRICE. ستجد المعلومات التالية في وحدة التحكم في الخادم:
نسخة الكود كما يلي:
NameObserver: تغيير الاسم إلى ؟؟؟؟؟
PriceObserver: تغيير السعر إلى ؟؟؟ (تم إدخال سعر المنتج في نموذج JSP) ؛
هذا يدل على أن المراقب يتصرف بالفعل.
في الوقت نفسه ، ستحصل على معلومات على المتصفح حيث تقوم بتنفيذ JSP:
1. حفظ بيانات المنتج!
نظرًا لأن المقالة أعلاه تستخدم مفهوم JSP ، فهي تعني العديد من الإجراءات التلقائية.
نسخة الكود كما يلي:
اختبار الفئة العامة {
الفراغ الثابت العام (سلسلة args []) {
منتج المنتج = منتج جديد () ؛
nameObserver nameObs = new NameObserver () ؛
PriceObserver PriceObs = New PriceObserver () ؛
// إضافة إلى Observer Product.addobserver (nameObs) ؛
product.addobserver (برايسوبس) ؛
product.setName ("Orange is Red") ؛
Product.setPrice (9.22f) ؛
}
}
ستجد المعلومات التالية:
NameObserver: تغيير الاسم إلى Orange باللون الأحمر
PriceObserver: تغيير السعر إلى 9.22
هذا يدل على أن المراقب يتصرف.