WEB开发网
开发学院软件开发C语言 无废话C#设计模式之十:Flyweight 阅读

无废话C#设计模式之十:Flyweight

 2009-04-02 08:23:25 来源:WEB开发网   
核心提示:意图 运用共享技术有效地支持大量细粒度的对象,场景在比较底层的系统或者框架级的软件系统中,无废话C#设计模式之十:Flyweight,通常存在大量细粒度的对象,即使细力度的对象,此时,我们可以引入享元模式来共享相同的模型对象,如果使用的数量级很高的话会占用很多资源,比如

意图

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

场景

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

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

示例代码

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;

        }

    }

}

1 2 3 4  下一页

Tags:废话 设计模式 Flyweight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接