您好,今天是: ·加入收藏·设为首页·联系站长
| 首页 | 网络安全 | 软件工程 | 网站开发 | NET学院 | JAVA专栏 | C&C++ | 综合资讯 | 程序人生 | 业界动态 | 搜天社区 | 软件下载
站内搜索:
当前位置:搜天网 >> NET学院 >> 浏览文章 立即入驻本站 | 免费发布供应信息
C#设计模式之Flyweight
作者:佚名 来源:互联网 文章点击数:

本系列文章将向大家介绍一下C#的设计模式,此为第十篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

  意图

  运用共享技术有效地支持大量细粒度的对象。

  场景

  在比较底层的系统或者框架级的软件系统中,通常存在大量细粒度的对象。即使细力度的对象,如果使用的数量级很高的话会占用很多资源。比如,游戏中可能会在无数个地方使用到模型数据,虽然从数量上来说模型对象会非常多,但是从本质上来说,不同的模型可能也就这么几个。

  此时,我们可以引入享元模式来共享相同的模型对象,这样就可能大大减少游戏对资源(特别是内存)的消耗。

  示例代码

以下是引用片段:
  using System;
  using System.Collections;
  using System.Text;
  using System.IO;
  namespace FlyweightExample
  {
  class Program
  {
  static void Main(string[] args)
  {
  Console.WriteLine(GC.GetTotalMemory(false));
  Random rnd = new Random();
  ArrayList al = new ArrayList();
  for (int i = 0; i < 10000; i++)
  {
  string modelName = rnd.Next(2).ToString();
  Model model = ModelFactory.GetInstance().GetModel(modelName);
  //Model model = new Model(modelName);
  al.Add(model);
  }
  Console.WriteLine(GC.GetTotalMemory(false));
  Console.ReadLine();
  }
  }
  class Model
  {
  private byte[] data;
  public Model(string modelName)
  {
  data = File.ReadAllBytes("c:\\" + modelName + ".txt");
  }
  }
  class ModelFactory
  {
  private Hashtable modelList = new Hashtable();
  private static ModelFactory instance;
  public static ModelFactory GetInstance()
  {
  if (instance == null)
  instance = new ModelFactory();
  return instance;
  }
  public Model GetModel(string modelName)
  {
  Model model = modelList[modelName] as Model;
  if (model == null)
  modelList.Add(modelName, new Model(modelName));
  return model;
  }
  }
  }

  代码执行结果如下图(前面是使用享元模式的结果,后面是没有使用享元模式的结果):

 



人支持

Tags:
发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
上一篇:C#3.0新特性介绍
下一篇:C#学习第一天
  最新文章
  热门文章
  推荐文章

| 设为首页 | 加入收藏 | 关于本站 | 联系站长 | 友情链接 | 版权申明 | 雁过留声 |

Copyright 2006-2008 Powered by soutian.NET,搜天网 All Rights Reserved.
服务电话:13568851603 传真:66297104 E-Mail:deige@yeah.net
咨询服务QQ:在线QQ