第107回 Flyweightパターンについて
公開日:2014-10-29 更新日:2019-05-13
1. 概要
独り言によるプログラミング講座「第107回 Flyweightパターンについて」です。
デザインパターンの1つである Flyweight パターンについて説明しています。
デザインパターンの1つである Flyweight パターンについて説明しています。
2. 動画
3. 動画中に書いたソース
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//★独り言によるプログラミング講座
//■Flyweightパターンについて
// オブジェクトを使い回すことにより、
// オブジェクト生成のコストを下げる。
// Prototype、Singletonパターンに近い。
// 使いまわすので、
// オブジェクトの内容を変更しない場合に使える。
//Form1 obj = new Form1();
//Form1 obj1 = Form1Factory.getInstance(1);
//Form1 obj2 = Form1Factory.getInstance(2);
}
FontFactory factory = new FontFactory();
private void button1_Click(object sender, EventArgs e)
{
//button1.Font = new Font("MSゴシック", 24);
Font f1 = factory.getInstance("MSゴシック", 10);
Font f2 = factory.getInstance("MSゴシック", 10);
Font f3 = factory.getInstance("MSゴシック", 24);
button1.Font = f3;
}
}
class FontFactory {
//キャッシュ用
Dictionary<String, Font> _map =
new Dictionary<String, Font>();
public Font getInstance(String name, int size) {
//キャッシュされているか?
String key = name + "_" + size.ToString();
Font font = null; //戻り値用
if (_map.TryGetValue(key, out font)) {
//取得できた場合
return font;
} else {
//取得できなかった場合 -> キャッシュする
font = new Font(name, size);
//キュッシュする
_map.Add(key, font);
return font;
}
}
}
}