簡介
運用共享技術(shù)有效的支持大量細粒度的對象應(yīng)用:當(dāng)一個應(yīng)用使用了大量的對象,而大量的這些對象造成了很大的存儲開銷的時候就應(yīng)該使用,還有就是對象的大多數(shù)狀態(tài)可以外部狀態(tài),如果刪除對象的外部狀態(tài),那么可以用相對較少的共享對象取代很多組對象,此時可以考慮使用享元模式。
代碼
//享元類的接口或者超累
abstract class Flyweight
{
public abstract void Operation(int extrinsicstate);
}
//具體的實現(xiàn)子類
class ConcreteFlyweight :Flyweight
{
private string name ="";
public ConcreteFlyweight(string name){
this.name = name;
}
public override void Operation(int extrinsicstate)
{
Console.WriteLine("具體 Flyweight:"+extrinsicstate);
}
}
//不共享的子類,不共享類的存在是因為有些數(shù)據(jù)是不需要共享的。
class UnsharedConcreteFlyweight :Flyweight
{
public override void Operation(int extrinsicstate)
{
Console.WriteLine("不共享的具體 Flyweight:"+extrinsicstate);
}
}
//享元工廠類,創(chuàng)建并管理 Flyweight 對象
class FlyweightFactory
{
private Hashtable flyweights = new Hashtable();
public Flyweight GetFlyweight(string key)
{
if(!flyweights.ContainsKey(key))
flyweights.Add(key,new ConcreteFlyweight(key))
}
return (Flyweight)flyweights(key);
}
}
//客戶端調(diào)用
static void Main(string[] args){
int num = 22;
FlyweightFactory f = new FlyweightFactory();
Flyweight fx = f.GetFlyweight("X");
fx.Operation(--num);
Flyweight fy = f.GetFlyweight("Y");
fy.Operation(--num);
Flyweight uf = new UnsharedConcreteFlyweight();
uf.Operation(--num);
Console.Read();
}