14
Flyweight 2011/4/25 大中浩行 2011425日月曜日

Flyweight

Embed Size (px)

Citation preview

Page 1: Flyweight

Flyweight2011/4/25大中浩行

2011年4月25日月曜日

Page 2: Flyweight

Flyweght=オブジェクトの共有

2011年4月25日月曜日

Page 3: Flyweight

2011年4月25日月曜日

Page 4: Flyweight

2011年4月25日月曜日

Page 5: Flyweight

Flyweightというのは「フライ級」のことで、ボクシングで最も「軽い」階級を指します。このパターンは、「インスタンスをできるだけ共有させて、無駄にnewしない」ことにより、システム全体でのメモリの消費を「軽

く」します。

2011年4月25日月曜日

Page 6: Flyweight

Flyweightパターンは「等価」なオブジェクトを共有します。等価とは、オブジェクトが持つ状態(プロパティ)の情報が、全て等しいと

いうことです。

2011年4月25日月曜日

Page 7: Flyweight

@Test public void Integerがキャッシュされる場合() throws Exception { Integer integer1_first = Integer.valueOf(1); Integer integer2 = Integer.valueOf(2); Integer integer1_second = Integer.valueOf(1); Integer integer1_third = new Integer(1); //等しい assertTrue(integer1_first == integer1_second); //等しくない assertFalse(integer1_first == integer2); //等価ではあるが、オブジェクトしては別 assertFalse(integer1_first == integer1_third);

}

具体例

2011年4月25日月曜日

Page 8: Flyweight

public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }

たねあかし

2011年4月25日月曜日

Page 9: Flyweight

@Test public void Integerがキャッシュされない場合() throws Exception { Integer integer127_first = 127; Integer integer127_second = 127; assertTrue(integer127_first == integer127_second);

Integer integer128_first = 128; Integer integer128_second = 128; //別オブジェクトになる assertFalse(integer128_first == integer128_second); }

なので...

2011年4月25日月曜日

Page 10: Flyweight

Flyweightなオブジェクトは、不変オブジェクト(Immutable)である必要があります。不変オブジェクトとは、java.lang.Integerや、java.math.BigDecimalのような、オブジェクトの状態を生成後に変更できないオブジェクトのことです。

2011年4月25日月曜日

Page 11: Flyweight

オブジェクトの状態のパターンが固定の場合は、タイプセーフ Enumを使用するのがよいでしょう。

2011年4月25日月曜日

Page 12: Flyweight

2011年4月25日月曜日

Page 13: Flyweight

2011年4月25日月曜日

Page 14: Flyweight

参考

• ギコ猫とFlywightパターン

• http://www.hyuki.com/dp/cat_Flyweight.html

2011年4月25日月曜日