享元模式:运用共享技术有效地支持大量的细粒度对象,其实就是将对象的相同部分(内部状态)和不同部分(外部状态)分离,并共享内部状态。 #region 享元模式 class User { private string name; public string Name { get { return name; } } public User(string name) { this.name = name; } } abstract class WebSite { abstract public 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("网站分类:{0} 用户:{1}",name,user.Name); } } class WebSiteFactory { private System.Collections.Hashtable hashData = new System.Collections.Hashtable(); public WebSite GetWebSiteByKey(string key) { if (!hashData.ContainsKey(key)) { hashData.Add(key, new ConcreteWebSite(key)); } return (WebSite)hashData[key]; } public int WebSiteCount() { return hashData.Count; } } #endregion class Program { static void Main(string[] args) { #region 享元模式 Console.WriteLine("享元模式效果演示:"); WebSiteFactory websiteFactory = new WebSiteFactory(); WebSite ws = websiteFactory.GetWebSiteByKey("论坛"); ws.Use(new User("老鸟")); Console.WriteLine("当前对象数量:{0}个",websiteFactory.WebSiteCount());//输出1 WebSite ws2 = websiteFactory.GetWebSiteByKey("论坛"); ws2.Use(new User("菜鸟")); Console.WriteLine("当前对象数量:{0}个", websiteFactory.WebSiteCount());//还是输出1,说明ws和ws2是同一个对象 WebSite ws3 = websiteFactory.GetWebSiteByKey("广告"); ws3.Use(new User("菜鸟")); Console.WriteLine("当前对象数量:{0}个", websiteFactory.WebSiteCount());//输出2 ,ws3为不同的对象 #endregion } }