程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 無廢話C#設計模式之十:Flyweight(1)

無廢話C#設計模式之十:Flyweight(1)

編輯:關於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 ;

        }

    }

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved