تحتوي لغة Java على العديد من الدعم المباشر لأنماط التصميم ، مثل وضع الأوامر ، وضع الوكيل ، وضع المراقبة ، إلخ. على الرغم من أن Java توفر الدعم لهذه الأنماط بسيطة للغاية ولا يمكنها تلبية تطبيقات أكثر تعقيدًا. ولكن في السيناريوهات البسيطة ، يمكن أن يحقق استخدام هذه الفئات تأثير رؤية الظل. لذلك ، إذا لم يكن لديك أي احتياجات خاصة ، فمن الأفضل استخدام هذه الفصول في Java.
يعد وضع المراقب ، المعروف أيضًا باسم وضع المراقبة ووضع المراقب ، أحد أوضاع التصميم الكلاسيكية (واحدة من GOF). في لغة Java ، هناك بشكل أساسي الفئات والواجهات التالية المدعومة لهذا النمط ، كل ذلك من حزمة Java.beans:
java.beans.propertychangelistener (واجهة) java.beans.propertychangesupport (الفئة) java.beans.propertychangeevent
هذه واجهة. من الواضح أن جميع الفئات التي تنفذ هذه الواجهة هي مستمع (أو مراقب) ، والتي ستكون مهتمة ببعض التغييرات في الكائن الذي يتم الاستماع إليه. هذه الواجهة لها طريقة واحدة:
property propertyChange (PropertyChangeEvent evt) {// todo tuto method method old}} تعريف الواجهة بسيط ووظيفته واضحة. قبول حدث (PropertyChangeEvent الذي تم إنشاؤه بواسطة المستمع) ، ثم رد فعل بناءً على هذا الحدث.
java.beans.propertychangesupport
يتم استخدام هذه الفئة في فئة المراقب ، وإنقاذ المراقبين المسجلين وتزويدهم بتغييرات المراقب. لا توجد طرق كثيرة لهذا النوع ، ولكن لا يزال يتم تقديمه فقط 100 ٪ منها ، وإلا فلن تتمكن من استخدام عقلك ، هاها.
PROPERTIONALCHANGESUPORT (كائن مصدر)
هذا هو المنشئ ، والمعلمات هي المستمع. يستخدم PropertyChangelistener عمومًا كخاصية للمستمع. يستخدم بشكل عام على النحو التالي:
PROPERTIONALSCHANGESUPPORT Beaders = New PropertyChangesupport (هذا) ؛
لاحظ أن هذا المستمع لا يمثل مستمعًا واحدًا فقط ، فقد يكون مجموعة من المستمعين. إذن من هم هؤلاء المستمعون؟ هذه المرة استخدمت الطريقة التالية.
public void addPropertyChangelistener (PropertyChangelistener Beasher)
هذا الفصل سهل للغاية ، أضف المستمع. تمامًا مثل المؤتمر الوطني السابع عشر للحزب الشيوعي في الصين ، إذا أراد أحد المراسلين مقابلة ، فيجب عليه التسجيل أولاً. من الواضح أن هذه الطريقة يمكن استدعاؤها عدة مرات (إضافة). الإضافة والطرح:
الفراغ العام removePropertyChangelistener (مستمع PropertyChangelistener)
إذا لم يكن الشاشة مهتمًا بأي تغييرات في الشخص المراقب ، فسيتم طرده بواسطة الشاشة.
حسنًا ، جميع المراسلين موجودون هنا ، وإذا كان هناك أي تغيير في الشاشة ، فقد حان الوقت لإخطار الشخص. استخدم إحدى الطرق التالية:
public public purbertychange (propertyChangeEvent evt) public void firepropertychange (string propertyName ، oldvalue boolean ، newvalue newValue) public pinerpropertychange
في الواقع ، سيتم تغليف معلمات الطرق الثلاث الأخيرة في PropertyChangeEvent ، ثم سيتم استدعاء الطريقة الأولى. ومع ذلك ، في الواقع ، ما زلنا نود أن ندعو مباشرة واحدة من الثلاثة الأخيرة ، ونحن لا نهتم بالتغليف. تحتوي الطرق الثلاثة الأخيرة على ثلاث معلمات ، من بينها Oldvalue و NewValue هي القيم قبل وبعد. الأول هو تغيير الاسم حتى يتمكن المستمعون من الرد بناءً على هذا الاسم. كما هو الحال في الاجتماع ، سيتم سماع جميع المعلومات الحكومية من قبل الصحفيين ، لكن بعض الصحفيين مهتمون فقط بقضية تايوان ، بينما يهتم آخرون بقضية الصين واليابان.
هذا هو كل مقدمة لطريقة PropertyChangesupport. لاحظ أنه نظرًا لاستخدام PropertyChangesupport في الفصل (عادةً نموذجًا) للمراقب ، فإن أساليبها تسمى فقط هنا عندما يتم ملاحظتها.
java.beans.propertychangeevent
أنا كسول جدًا في تقديم هذا الفصل ، فقط انظر إلى طريقته الرئيسية وفهم ما يجري
السلسلة العامة getPropertyName () الكائن العام getNewValue () الكائن العام getoldvalue ()
هناك ثلاث فئات ، والآخر هو تحليل قضايا محددة. دعونا نأخذ مثالاً ، أولاً وقبل كل شيء ، المراقب:
مجال الفئة العامة {معرف السلسلة المحمي ؛ اسم السلسلة المحمية ؛ سلسلة محمية desname. Property PropertyChangesupport المستمعين = New PropertyChangesupport (هذا) ؛ السلسلة العامة getId () {معرف الإرجاع ؛ } public void setId (string id) {this.id = id ؛ firepropertychange ("domain.id" ، null ، id) ؛ } السلسلة العامة getDesName () {return desname ؛ } public void setDesName (String desname) {this.desName = desname ؛ firepropertychange ("domain.desName" ، null ، desname) ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ firepropertychange ("domain.name" ، null ، name) ؛ } public void addPropertyChangelistener (propertyChangelistener beasherer) {leaders.addpropertychangelistener (beatherer) ؛ } public void firepropertychange (سلسلة propname ، Object OldValue ، Object newValue) {beaders.firepropertychange (propname ، oldvalue ، newValue) ؛ } public void removePropertyChangelistener (propertyChangelistener beasherer) {leaders.RemovePropertyChangelistener (beatherer) ؛ }} بعض الناس مهتمون بالسمات الثلاث للمجال. هذا واحد من هؤلاء الناس:
الطبقة العامة SimpleObserver تنفذ PropertyChangelistener {.... Override public void propertyChange (propertyChangeEvent evt) {if (evt.getPropertyName (). متساوٍ ("domain.name")) {// القيام ببعض العمل}}} هنا فئة اختبار بسيطة:
الفئة العامة SimpleTest {public static void main (string [] args) {SimpleObserver Observer = New SimpleObserver () ؛ مجال المجال = مجال جديد () ؛ Domain.AddPropertyChangelistener (Observer) ؛ domain.setName ("yangsq") ؛ ......}}من الواضح ، يمكن ملاحظة تنفيذ طريقة PropertyChange في SimpleObserver.