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("相同对象");
                }
         
            
            }
        }
    

    参考地址

  • 相关阅读:
    字符串题表
    插头dp题表
    点分治题表
    Kd-tree题表
    【BZOJ 4605】崂山白花蛇草水 替罪羊树套线段树
    假的kd-tree小结
    【BZOJ 1492】 [NOI2007]货币兑换Cash 斜率优化DP
    CDQZ 2017 游记
    【BZOJ 1146】[CTSC2008]网络管理Network
    联赛之前的题表(已完成)汇总(可能有遗漏)
  • 原文地址:https://www.cnblogs.com/icxldd/p/15799668.html
Copyright © 2011-2022 走看看