Шрифт:
Листинг 11.11. Три полезных способа кэширования графических ресурсов
using System;
using System.Drawing;
internal class GraphicsGlobals {
//==========================================================================
//Подход 1: Создать ресурс по требованию
// и кэшировать его для последующего использования.
//
//Внешний код получает доступ к общедоступным свойствам для их просмотра, но
//сами переменные остаются внутренними переменными класса
//==========================================================================
private static Pen s_bluePen;
public static Pen globalBluePen {
get {
//Если перо еще не было создано
if (s_bluePen == null) {
s_bluePen =new System.Drawing.Pen(System.Drawing.Color.Blue);
}
return s bluePen;
}
} //Конец свойства
//=========================================================
//Подход 2:
//Загрузить глобально и кэшировать все
//используемые объекты Pen, ImageAttribute, Font и Brush.
//
//Внешний код получает доступ ко всем общедоступным членам,
//так что никакие функции доступа не нужны.
//=========================================================
public static Pen g_blackPen;
public static Pen g_whitePen;
public static System.Drawing.Imaging.ImageAttributes g_ImageAttribute;
private static bool s_alreadyInitialized;
public static Font g_boldFont;
public static Font g_smallTextFont;
public static Brush g_greenBrush;
public static Brush g_yellowBrush;
public static Brush g_redBrush;
public static Brush g_blackBrush;
//==============================================================
//Эта функция должна быть вызвана до попыток доступа к любому из
//вышеперечисленных глобальных объектов
//==============================================================
public static void InitializeGlobals {
if (s_alreadyInitialized == true) {
return;
}
g_blackPen = new System.Drawing.Pen(Color.Black);
g_whitePen = new System.Drawing.Pen(Color.White);
g_ImageAttribute = new System.Drawing.Imaging.ImageAttributes;
g_ImageAttribute.SetColorKey(Color.White, Color.White);
g_boldFont = new Font(FontFamily.GenericSerif, 10, FontStyle.Bold);
g_smallTextFont = new Font(FontFamily.GenericSansSerif, 8, FontStyle.Regular);
g_blackBrush = new SolidBrush(System.Drawing.Color.Black);
g_greenBrush = new SolidBrush(System.Drawing.Color.LightGreen);
g_yellowBrush = new SolidBrush(System.Drawing.Color.Yellow);
g_redBrush = new SolidBrush(System.Drawing.Color.Red);
s_alreadyInitialized = true;
}
//=========================================================
//Подход 3: Возвратить массив связанных ресурсов.
// Кэшировать ресурсы локально, чтобы при многократных
// запросах не загружались (понапрасну) их дубликаты.
//=========================================================
private static Bitmap m_CaveMan_Bitmap1;
private static Bitmap m_CaveMan_Bitmap2;