Design Pattern: Iterator

Định nghĩa:

Iterator là một dạng vòng lặp. Đối với 1 danh sách các đối tượng không đồng nhất nhau thì việc đưa vào các danh sách như List, Sort, Map sẽ giúp cho việc duyệt qua danh sách dễ dàng mà không cần quan tâm đến sự hiện diện bên trong của danh sách.

Ví dụ có interface Employee và 2 class hiện thực là HourlyEmployee – nhân viên làm theo giờ và RegularEmployee – nhân viên lãnh lương tháng.

interface Employee {
     double earnings();
}

 

public class HourlyEmployee implements Employee {
   private double salaryPerHour;
   private String name;

   public HourlyEmployee(double salaryPerHour, String name) {
      super();
      this.salaryPerHour = salaryPerHour;
      this.name = name;
   }

   public double earnings() {
      return 40*salaryPerHour;
   }

   public String toString() {
      return name;
   }
}

 

public class RegularEmployee implements Employee {
   private double salaryPerMonth;
   private String name;

   public RegularEmployee(double salaryPerMonth, String name) {
      super();
      this.salaryPerMonth = salaryPerMonth;
      this.name = name;
   }

   public double earnings() {
      return salaryPerMonth;
   }

   public String toString() {
      return name;
   }
}

Sử dụng pattern này:

public static void main(String[] args) {
   List list = new ArrayList();
   list.add(new HourlyEmployee(30, "Petter"));
   list.add(new RegularEmployee(20000000, "Mary"));
   Iterator itr = list.iterator();
   while(itr.hasNext()) {
      Employee em = (Employee)itr.next();
      System.out.println(em + " earns "+em.earnings());
   }
}

Source: http://javadevelopervietnam.blogspot.com/2010/10/iterator-loai-behavioral-o-kho-thap.html

5 thoughts on “Design Pattern: Iterator

  1. xin chào, rất cảm ơn bài viết của bạn. Nhưng hình như bạn lặp lại 2 lần class HourlyEmployee và thiếu mất class RegularEmployee.

  2. Thanks bạn ininin00 đã phát hiện. Thật ra bên trong hàm đó làm gì cũng không quan trọng đâu về đây chỉ là ví dụ minh họa mà. Chủ yếu là cả 2 hàm đều có method earnings() và cùng implement cùng một Interface. Nên ta không quan tâm đó là HourlyEmployee hay RegularEmployee, tất cả cùng ép về Employee gọi method earnings()

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s