تعريف الزائر: عملية تعمل على كل كائن في مجموعة كائن معينة. يسمح لك بتحديد عمليات جديدة تعمل على هذه الأشياء دون تغييرها بأنفسهم.
في Java ، يفصل نمط الزائر في الواقع عناصر في بنية التجميع وسلوك العمل على هذه العناصر.
لماذا تستخدم وضع الزوار
مجموعة Java (بما في ذلك المتجه وعلم التجزئة) هي التكنولوجيا التي نستخدمها بشكل متكرر ، ولكن يبدو أن المجموعة عبارة عن ضريبة صغيرة من الصباغ السوداء. ثم يجب أن نستخدم إذا للحكم ، مثل:
نسخة الكود كما يلي:
iterator iterator = collection.iterator ()
بينما (iterator.hasnext ()) {
كائن o = iterator.next () ؛
إذا (o extryof collection)
MessyPrintCollection ((collection) o) ؛
آخر إذا (o electionof string)
System.out.println ("" "+O.ToString ()+" '") ؛
وإلا
System.out.println (O.ToString ()+"F") ؛
آخر
System.out.println (O.ToString ()) ؛
}
في المثال أعلاه ، استخدمنا مثيل لتحديد نوع O.
من الواضح أن عيوب القيام بذلك إذا كانت الرمز مرهقًا ، يمكننا حلها باستخدام وضع الزوار.
كيفية استخدام وضع الزوار
على سبيل المثال أعلاه ، نقوم بتصميم زائر زائر الواجهة:
نسخة الكود كما يلي:
زائر الواجهة العامة
{
public void visitcollection (مجموعة المجموعة) ؛
public void visitstring (سلسلة سلسلة) ؛
public void visitfloat (Float Float) ؛
}
في هذه الواجهة ، ضع أنواع الفصول التي نعتقد أن المجموعة ممكنة.
مع الزوار ، يجب زيارته. لا يرحب به ، لن يتمكن الزائر من زيارته).
نحدد هذه الواجهة على أنها قابلة للزيارة ، والتي تتمثل في تحديد عملية قبول ، أي جعل كل عنصر من عناصر المجموعة متاحة.
نسخة الكود كما يلي:
الواجهة العامة قابلة لزيارة {
قبول الفراغ العام (زائر الزوار) ؛
}
حسنًا ، مع واجهتين ، نحتاج إلى تحديد تنفيذها المحدد (فئة ملموسة):
نسخة الكود كما يلي:
تنفذ الخرسانة من الطبقة العامة القابلة للزيارة
{
قيمة السلسلة الخاصة ؛
concretelement (سلسلة السلسلة) {
القيمة = السلسلة ؛
}
// تحديد المحتوى المحدد للقبول هنا هو جملة بسيطة للغاية لاستدعاء الفراغ العام قبول (زائر الزائر) {
زائر.
}
}
دعونا نلقي نظرة على تنفيذ الزائر الملموس:
نسخة الكود كما يلي:
الطبقة العامة concretevisitor تنفذ الزائر
{
// في هذه الطريقة ، نقوم بتنفيذ الوصول الناجح إلى عناصر مجموعة Void void VisitCollection (مجموعة المجموعة) {
iterator iterator = collection.iterator ()
بينما (iterator.hasnext ()) {
كائن o = iterator.next () ؛
إذا (o مثيل للزيارة)
((قابلة للزيارة) O) .Accept (هذا) ؛
}
public void visitstring (سلسلة سلسلة) {
System.out.println ("" "+string+" "") ؛
}
public void visitfloat (float float) {
system.out.println (float.toString ()+"f") ؛
}
}
في VisitCollection أعلاه ، نقوم بتنفيذ الوصول إلى كل عنصر من عناصر المجموعة ، باستخدام بيان حكم واحد فقط ، فقط لتحديد ما إذا كان يمكن الوصول إليه.
في هذه المرحلة ، أكملنا الهندسة المعمارية الأساسية لنموذج الزوار.
المتطلبات الأساسية لاستخدام وضع الزوار
نادراً ما يتم تغيير نوع الكائن في بنية مجموعة الكائن ، أي نوع هوية الزائر نادراً بالإضافة إلى التنفيذ المحدد للخرسانة ، هناك حاجة أيضًا إلى ConcreteElement2 ConcreteElement3.
يمكن ملاحظة أن هناك شرطًا أساسيًا لاستخدام وضع الزوار.
إذا تغير الزائر أيضًا بشكل متكرر ، فغالبًا ما تتغير أنواع الكائنات في مجموعة الكائنات ، فإن الاقتراح العام هو أنه من الأفضل تحديد العمليات واحدة تلو الأخرى في فئات الكائنات هذه ، لكن تقنية Java تعكس هذه المشكلة.