بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Visitor

در الگوی Visitor، از یک کلاس visitor استفاده می کنیم که الگوی اجراییِ یک عنصر کلاس را تغییر میده،. با این روش، الگوریتم اجراییِ عنصر، زمانی که visitor تغییر می کنه، میتواند تغییر کنه. این الگو زیرگروه الگویِ رفتاری (behavior) محسوب میشه. در هر الگو، شیءِ عنصر باید شیءِ visitor را بپذیره تا شیءِ visitor عملیات ها را در شیءِ عنصر انجام بده.

پیاده سازی

در این بخش رابطی به نام CompuerPart ایجاد می کنیم که عملیات پذیرش را انجام میده. Keyboard، Mouse، Monitor و Computer، کلاس های concreteای هستن که رابطِ ComputerPart را پیاده سازی می کنن. رابط دیگه ای به نام ComputerPartVisitor نیز تعریف خواهیم کرد که عملیات یک کلاسِ visitor را مشخص می کنه. Computer از concrete visitor برای عملیات مربوط استفاده می کنه.

VisitorPatternDemo، در نسخه ی آزمایشی کلاس مان، از کلاس های Computer و ComputerPartVisitor، برای نشان دادن کاربرد الگوی visitor استفاده خواهیم کرد.

visitor pattern uml diagram

مرحله ی 1

تعریف یک رابط برای نمایش عنصر.

ComputerPart.java

public interface ComputerPart {
   public void accept(ComputerPartVisitor computerPartVisitor);
}

مرحله ی 2

ایجاد کلاس های concreteای که کلاس های بالا را توسعه میدن.

Keyboard.java

public class Keyboard implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Monitor.java

public class Monitor implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Mouse.java

public class Mouse implements ComputerPart {

   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      computerPartVisitor.visit(this);
   }
}

Computer.java

public class Computer implements ComputerPart {
	
   ComputerPart[] parts;

   public Computer(){
      parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()};		
   } 


   @Override
   public void accept(ComputerPartVisitor computerPartVisitor) {
      for (int i = 0; i < parts.length; i++) {
         parts[i].accept(computerPartVisitor);
      }
      computerPartVisitor.visit(this);
   }
}

مرحله ی 3

تعریف رابطی برای نمایشِ visitor.

ComputerPartVisitor.java

public interface ComputerPartVisitor {
	public void visit(Computer computer);
	public void visit(Mouse mouse);
	public void visit(Keyboard keyboard);
	public void visit(Monitor monitor);
}

مرحله ی 4

ایجادِ concrete visitor که کلاس بالا را پیاده سازی می کنه.

ComputerPartDisplayVisitor.java

public class ComputerPartDisplayVisitor implements ComputerPartVisitor {

   @Override
   public void visit(Computer computer) {
      System.out.println("Displaying Computer.");
   }

   @Override
   public void visit(Mouse mouse) {
      System.out.println("Displaying Mouse.");
   }

   @Override
   public void visit(Keyboard keyboard) {
      System.out.println("Displaying Keyboard.");
   }

   @Override
   public void visit(Monitor monitor) {
      System.out.println("Displaying Monitor.");
   }
}

مرحله ی 5

استفاده از ComputerPartDisplayVisitor برای دیدن اجزایِ Computer.

VisitorPatternDemo.java

public class VisitorPatternDemo {
   public static void main(String[] args) {

      ComputerPart computer = new Computer();
      computer.accept(new ComputerPartDisplayVisitor());
   }
}

مرحله ی 6

بررسی خروجی

Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

آخرین مقالات

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد