- 運用共用技術有效地支援大量細粒度的物件。
- 享元模式Flyweight執行時所需的狀態是有內部的、也可能有外部的。內部狀態儲存於ConcreteFlyweight物件之中,而外部物件則應該考慮由用戶端物件儲存或計算。當調用Flyweight物件的操作時,將該狀態傳遞給它。
![]() |
| 基本架構圖 |
![]() |
| 實例架構圖 |
using System;
using System.Collections;
namespace DPExample
{
abstract class 網站
{
public abstract void Use(用戶 user);
}
class 具體網站 : 網站
{
private string name = "";
public 具體網站 (string name)
{
this.name = name;
}
public override void Use(用戶 user)
{
Console.WriteLine ("網站分類:" + name + " 用戶:" + user.Name);
}
}
class 網站工廠
{
private Hashtable flyweights = new Hashtable();
public 網站 取得網站分類(string key)
{
if (!flyweights.ContainsKey (key))
flyweights.Add (key, new 具體網站(key));
return ((網站)flyweights[key]);
}
public int 取得網站分類總數()
{
return flyweights.Count;
}
}
public class 用戶
{
private string name;
public string Name
{
get { return name; }
}
public 用戶(string name)
{
this.name = name;
}
}
}
using System;
namespace DPExample
{
public class Program
{
static void Main ()
{
網站工廠 f = new 網站工廠();
網站 fx = f.取得網站分類("產品展示");
fx.Use(new 用戶("小菜"));
網站 fy = f.取得網站分類("產品展示");
fy.Use(new 用戶("大鳥"));
網站 fz = f.取得網站分類("產品展示");
fz.Use(new 用戶("嬌嬌"));
網站 fl = f.取得網站分類("部落格");
fl.Use(new 用戶("老頑童"));
網站 fm = f.取得網站分類("部落格");
fm.Use(new 用戶("桃谷六仙"));
網站 fn = f.取得網站分類("部落格");
fn.Use(new 用戶("南海鱷神"));
Console.WriteLine ("網站分類總數為 {0}", f.取得網站分類總數());
}
}
}


留言
張貼留言