【デザインパターン】【非同期】Immutableパターン

■ Immutable

 * 壊したくとも、壊せない (インスタンスの内容が変化しない)
 * immutable(イミュータブル) = 不変の

特徴 / 利点

別にたいしたことはない
 * フィールドに対してsetterを提供せず、getterだけを提供
  => 値は変更できない
  => メソッドなどにsynchronizedをつけて排他制御をする必要がない
  => 【利点】パフォーマンス向上につながる

■ サンプル

Person.java

フィールドに対してsetterを提供せず、getterだけを提供している
public class Person {
   private long id;
   private String name;
   
   public Person(long id, String name) {
      this.id = id;
      this.name = name;
   }
   
   public long getId() {
      return this.id;
   }
   public String getName() {
      return this.name;
   }
   
   public String toString() {
      return "ID " + this.id + " Name " + this.name;
   }
}

Main.java

public class Main {
   public static void main(String[] args) {
      Person person1 = new Person(1, "Mike");
      new PrintThread(person1).start();
      new PrintThread(person1).start();
      Person person2 = new Person(2, "Tom");
      new PrintThread(person2).start();
   }
}

PrintThread.java

public class PrintThread extends Thread {
   private Person person;

   public PrintThread(Person person) {
      this.person = person;
   }

   public void run() {
      for (int i = 0; i < 3; i++) {
         System.out.println(Thread.currentThread().getName() + " : "
               + this.person.toString());
      }
   }
}

出力結果

Thread-0 : ID 1 Name Mike
Thread-2 : ID 2 Name Tom
Thread-1 : ID 1 Name Mike
Thread-0 : ID 1 Name Mike
Thread-2 : ID 2 Name Tom
Thread-0 : ID 1 Name Mike
Thread-1 : ID 1 Name Mike
Thread-1 : ID 1 Name Mike
Thread-2 : ID 2 Name Tom


関連記事

デザインパターン / マルチスレッド の分類 ~目次~

http://blogs.yahoo.co.jp/dk521123/34195603.html

アクセサ ~ getter / setter ~

 * 「[3] 参照可能で代入不可のプロパティを作れる」を参照
http://blogs.yahoo.co.jp/dk521123/33187004.html