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

    字体 享元

        public class FontFlyWeight
        {
            //享元对象标识,用于作为存入键值对中的键值
            public const string NAME = "";
            private char fontContent;
    
            public char FontContent
            {
                get => fontContent;
                set => fontContent = value;
            }
    
            public FontFlyWeight(char font)
            {
                fontContent = font;
            }
    
            public string SetColor(string color)
            {
                Console.WriteLine($"将当前字体{FontContent}的字体颜色设置为{color}");
                return color;
            }
    
            public string SetSize(string size)
            {
                Console.WriteLine($"将当前字体{FontContent}的字体大小设置为{size}");
                return size;
            }
        }
    
        public class FontA : FontFlyWeight
        {
            public new const string NAME = "FontA";
            public FontA(char font) : base(font)
            {
            }
        }
    
        public class FontB : FontFlyWeight
        {
            public new const string NAME = "FontB";
            public FontB(char font) : base(font)
            {
            }
        }
    
        public class FontFactory
        {
            private static FontFactory m_instance;
    
            public static FontFactory GetInstance
            {
                get
                {
                    if (m_instance == null)
                    {
                        m_instance = new FontFactory();
                    }
                    return m_instance;
                }
            }
    
            private FontFactory()
            {
                AddFont(FontA.NAME, new FontA('a'));
                AddFont(FontB.NAME, new FontB('b'));
            }
            
            private Dictionary<string, FontFlyWeight> m_fontDic =
                new Dictionary<string, FontFlyWeight>();
    
            public void AddFont(string fontName, FontFlyWeight font)
            {
                if (m_fontDic.ContainsKey(fontName))
                {
                    m_fontDic[fontName] = font;
                }
                else
                {
                    m_fontDic.Add(fontName, font);
                }
            }
    
            public FontFlyWeight FindFont(string fontName)
            {
                if (m_fontDic.ContainsKey(fontName))
                {
                    return m_fontDic[fontName];
                }
    
                return null;
            }
    
            public void RemoveFont(string fontName)
            {
                if (m_fontDic.ContainsKey(fontName))
                {
                    m_fontDic.Remove(fontName);
                }
            }
        }
    
    
           static void Main(string[] args)
            {
                FontFlyWeight a, b;
                a = FontFactory.GetInstance.FindFont(FontA.NAME);
                
                var aa = FontFactory.GetInstance.FindFont(FontA.NAME);
                if (a.GetHashCode().Equals(aa.GetHashCode()))
                {
                    Console.WriteLine("相同对象");
                }
         
            
            }
        }
    

    参考地址

  • 相关阅读:
    [COCI20142015#1] Kamp
    [CEOI2007]树的匹配Treasury
    [JLOI2016/SHOI2016]侦察守卫
    [POI2015]MOD
    [BJOI2017]机动训练
    [九省联考2018]一双木棋chess
    [清华集训2012]串珠子
    [POI2014]ZALFreight
    [SHOI2009]舞会
    [COCI2019]Mobitel
  • 原文地址:https://www.cnblogs.com/icxldd/p/15799668.html
Copyright © 2011-2022 走看看