• 一个没有方法继承的Flyweight模式


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace Flyweight
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                string document = "AAZZBBZBAAZZBBZBAAZZBBZB";

                char[] chars = document.ToCharArray();
                int charsCount=0;

         

                  CharacterFactory factory = new CharacterFactory();

                  foreach (char c in chars)

                  {

                    charsCount++;

                    Character character = factory.GetCharacter(c);

                     Response.Write(character.Display(charsCount,"#0000FF"));

                  }
                Response.Write("共"+charsCount+"字符");

            
               }


            }


        }

        class CharacterFactory
        {

            private Dictionary<char, Character> _characters =

              new Dictionary<char, Character>();

            public Character GetCharacter(char key)
            {

                // Uses "lazy initialization"

                Character character = null;

                if (_characters.ContainsKey(key))
                {

                    character = _characters[key];

                }

                else
                {

                    switch (key)
                    {

                        case 'A': character = new CharacterA(); break;

                        case 'B': character = new CharacterB(); break;

                        //...

                        case 'Z': character = new CharacterZ(); break;

                    }

                    _characters.Add(key, character);

                }

                return character;

            }

        }

        /// <summary>

        /// The 'Flyweight' abstract class

        /// </summary>

        abstract class Character
        {

            protected char symbol;

            protected int width;

            protected int height;

            protected string color;

            protected int descent;

            protected int fontsize;

            public string Display(int fontsize, string color)
            {

                this.fontsize = fontsize;
                this.color = color;

                return "<FONT SIZE=" + fontsize + " COLOR=" + color + ">" + this.symbol + "</FONT>";
            }
        }

        /// <summary>

        /// A 'ConcreteFlyweight' class

        /// </summary>

        class CharacterA : Character
        {

            // Constructor

            public CharacterA()
            {

                this.symbol = 'A';

            }

            //public override string Display(int fontsize, string color)
            //{

            //    this.fontsize = fontsize;
            //    this.color = color;

            //    return "<FONT SIZE=" + fontsize + " COLOR=" + color + ">" + this.symbol + "</FONT>";
            //}

        }

        /// <summary>

        /// A 'ConcreteFlyweight' class

        /// </summary>

        class CharacterB : Character
        {

            // Constructor

            public CharacterB()
            {

                this.symbol = 'B';

            }


        }


       class CharacterZ : Character
        {

            // Constructor

            public CharacterZ()
            {

                this.symbol = 'Z';

            }

        }


     

    关于作者: 王昕(QQ:475660) 在广州工作生活30余年。十多年开发经验,在Java、即时通讯、NoSQL、BPM、大数据等领域较有经验。
    目前维护的开源产品:https://gitee.com/475660
  • 相关阅读:
    Android视图控件架构分析之View、ViewGroup
    JAVA多线程编程——JAVA内存模型
    开源CMS系统Moodle对比中国本土化开源在线教育平台EduSoho
    Android系统Binder机制学习总结
    Android中一个关于ListView的奇怪问题
    判断分数区间(优良以及未及格)
    js求三个数的最大值运算
    年月日时间选择
    js单击时页面的弹出
    margin与padding
  • 原文地址:https://www.cnblogs.com/starcrm/p/1358144.html
Copyright © 2020-2023  润新知