Upload
hiroyuki-ohnaka
View
651
Download
3
Embed Size (px)
Citation preview
Flyweight2011/4/25大中浩行
2011年4月25日月曜日
Flyweght=オブジェクトの共有
2011年4月25日月曜日
2011年4月25日月曜日
2011年4月25日月曜日
Flyweightというのは「フライ級」のことで、ボクシングで最も「軽い」階級を指します。このパターンは、「インスタンスをできるだけ共有させて、無駄にnewしない」ことにより、システム全体でのメモリの消費を「軽
く」します。
2011年4月25日月曜日
Flyweightパターンは「等価」なオブジェクトを共有します。等価とは、オブジェクトが持つ状態(プロパティ)の情報が、全て等しいと
いうことです。
2011年4月25日月曜日
@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日月曜日
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日月曜日
@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日月曜日
Flyweightなオブジェクトは、不変オブジェクト(Immutable)である必要があります。不変オブジェクトとは、java.lang.Integerや、java.math.BigDecimalのような、オブジェクトの状態を生成後に変更できないオブジェクトのことです。
2011年4月25日月曜日
オブジェクトの状態のパターンが固定の場合は、タイプセーフ Enumを使用するのがよいでしょう。
2011年4月25日月曜日
2011年4月25日月曜日
2011年4月25日月曜日
参考
• ギコ猫とFlywightパターン
• http://www.hyuki.com/dp/cat_Flyweight.html
2011年4月25日月曜日