zoukankan      html  css  js  c++  java
  • 享元模式

    前言

      享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。

    一、网站抽象类

      

    1     public abstract class WebSite
    2     {
    3         //"使用"方法需要传递“用户”对象
    4         public abstract void Use(User user);
    5     }

    二、网站具体类

      

     1     public class ConcreteWebSite : WebSite
     2     {
     3         private string name;
     4         public ConcreteWebSite(string name)
     5         {
     6             this.name = name;
     7         }
     8         public override void Use(User user)
     9         {
    10             Console.WriteLine("网站分类:" + name + " 用户:" + user.Name);
    11         }
    12     }

    三、网站工厂类

      

     1     public class WebSiteFactory
     2     {
     3         private Hashtable flyWeights = new Hashtable();
     4         //获得网站分类
     5         public WebSite GetWebSiteCategory(string key)
     6         {
     7             if (!flyWeights.ContainsKey(key))
     8             {
     9                 flyWeights.Add(key, new ConcreteWebSite(key));
    10             }
    11             return (WebSite)flyWeights[key];
    12         }
    13         //获得网站分类总数
    14         public int GetWebSiteCount()
    15         {
    16             return flyWeights.Count;
    17         }
    18     }

    四、客户端代码

      

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             WebSiteFactory f = new WebSiteFactory();
     6 
     7             WebSite f1 = f.GetWebSiteCategory("产品展示");
     8             f1.Use(new User("美美"));
     9 
    10             WebSite f2 = f.GetWebSiteCategory("产品展示");
    11             f2.Use(new User("柔柔"));
    12 
    13             WebSite f3 = f.GetWebSiteCategory("产品展示");
    14             f3.Use(new User("香香"));
    15 
    16             WebSite f4 = f.GetWebSiteCategory("博客");
    17             f4.Use(new User("丽丽"));
    18 
    19             WebSite f5= f.GetWebSiteCategory("博客");
    20             f5.Use(new User("探探"));
    21 
    22             WebSite f6 = f.GetWebSiteCategory("博客");
    23             f6.Use(new User("静静"));
    24 
    25             Console.WriteLine("网站分类总数:{0}", f.GetWebSiteCount());
    26             Console.Read();
    27         }
    28     }

    五、总结

      1、如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销就应该考虑使用。

      2、对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

      参考数据:大话设计模式

  • 相关阅读:
    2011年上半年软考信息系统项目管理师顺利通过了。
    技术工程师之歌
    大家都很注重能力的时候,我却在努力提高学历
    新的开发团队配合模式,适合小型团队
    研发部的四套马车
    mysql给root开启远程访问权限,修改root密码
    js客户端判断文件大小限制上传
    metro 微博api开发,post请求
    VS2010在C#头文件添加文件注释的方法
    android ListView 常见问题 之 高度问题
  • 原文地址:https://www.cnblogs.com/hyunbar/p/10043762.html
Copyright © 2011-2022 走看看