大话设计模式之享元模式(二)

2014-11-24 07:41:26 · 作者: · 浏览: 1
WebSite fz=f.GetWebSiteCategory ("产品展示");
fz.Use (new User ("韩学敏"));
WebSite fl=f.GetWebSiteCategory ("博客");
fl .Use (new User ("李双 "));
WebSite fm=f .GetWebSiteCategory ("博客");
fm.Use (new User ("周医青"));
WebSite fn = f.GetWebSiteCategory("博客");
fn.Use(new User("唐欢"));
Console .WriteLine ("得到网站分类总数为{0}",f.GetWebSiteCount ());
Console.Read();
}
}
//用户类 ,用于网站的客户账号,是“网站”类的外部状态
public class User
{
private string name;
public User(string name)
{
this.name = name;
}
public string Name
{
get { return name; }
}
}
//网站抽象类
abstract class WebSite
{
public abstract void Use(User user);
}
//具体网站类
class ConcreteWebSite : WebSite
{
private string name = "";
public ConcreteWebSite(string name)
{
this.name = name;
}
public override void Use(User user)
{
Console.WriteLine("网站分类:" + name + "用户:" + user.Name);
}
}
//网站工厂类
class WebSiteFactory
{
private Hashtable flyweights=new Hashtable ();
//获得网站分类
public WebSite GetWebSiteCategory(string key)
{
if (!flyweights .ContainsKey (key ))
flyweights .Add (key ,new ConcreteWebSite (key ));
return ((WebSite )flyweights [key ]);
}
//获得网站分类总数
public int GetWebSiteCount()
{
return flyweights .Count ;
}
}
}
运行结果:
享元模式的应用
如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时
当对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代多组对象
享元模式的优点:
实例总数少了
共享的对象越多,存储节约也就越多,节约量随着共享状态的增多而增大