簡介
運(yùn)用共享技術(shù)有效的支持大量細(xì)粒度的對象應(yīng)用:當(dāng)一個(gè)應(yīng)用使用了大量的對象,而大量的這些對象造成了很大的存儲開銷的時(shí)候就應(yīng)該使用,還有就是對象的大多數(shù)狀態(tài)可以外部狀態(tài)剂桥,如果刪除對象的外部狀態(tài)凯旭,那么可以用相對較少的共享對象取代很多組對象,此時(shí)可以考慮使用享元模式芥喇。
代碼
//享元類的接口或者超累
abstract class Flyweight
{
public abstract void Operation(int extrinsicstate);
}
//具體的實(shí)現(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);
}
}
//不共享的子類,不共享類的存在是因?yàn)橛行?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();
}