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

本文通过一个具体的.NET Web应用程序展示了享元模式的实现方法。该模式通过使用共享技术和懒加载初始化来减少创建对象的数量,从而有效地降低内存消耗。文中详细介绍了如何为一组字符创建共享的对象池,并利用这些对象高效地显示大量重复字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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';

        }

 

    }

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值