⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flyweightrealworld.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Collections;

//享元模式(Flyweight)
//意图
//    运用共享技术有效地支持大量细粒度的对象。
//适用性
//    1.一个应用程序使用了大量的对象。
//    2.完全由于使用大量的对象,造成很大的存储开销。
//    3.对象的大多数状态都可变为外部状态。
//    4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
//    5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

namespace DesignPattern.FlyweightRealWorld
{
    class FlyweightRealWorld : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Build a document with text 
            string document = "AAZZBBZB"; 
            char[] chars = document.ToCharArray(); 
            CharacterFactory f = new CharacterFactory(); 
            
            // extrinsic state 
            int pointSize = 10; 
            
            // For each character use a flyweight object 
            foreach (char c in chars) 
            {
                pointSize++; 
                Character character = f.GetCharacter(c); 
                character.Display(pointSize); 
            }
            // Wait for user 
            //Console.Read();
        }
    }
    
    // "FlyweightFactory" 
    class CharacterFactory 
    {
        private Hashtable characters = new Hashtable(); 
        public Character GetCharacter(char key) 
        {
            // Uses "lazy initialization" 
            Character character = characters[key] as Character; 
            if (character == null) 
            {
                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; 
        }
    } 
    
    // "Flyweight" 
    abstract class Character 
    {
        protected char symbol; 
        protected int width; 
        protected int height; 
        protected int ascent; 
        protected int descent; 
        protected int pointSize; 
        public abstract void Display(int pointSize); 
    }
    
    // "ConcreteFlyweight" 
    class CharacterA : Character 
    {
        // Constructor 
        public CharacterA() 
        {
            this.symbol = 'A'; 
            this.height = 100; 
            this.width = 120; 
            this.ascent = 70; 
            this.descent = 0; 
        }
        
        public override void Display(int pointSize) 
        {
            this.pointSize = pointSize;
            DesignPattern.FormMain.OutputInfo(this.symbol + " (pointsize " + this.pointSize + ")");
        }
    } 
    
    // "ConcreteFlyweight" 
    class CharacterB : Character 
    {
        // Constructor 
        public CharacterB() 
        {
            this.symbol = 'B'; 
            this.height = 100; 
            this.width = 140; 
            this.ascent = 72; 
            this.descent = 0; 
        }
        
        public override void Display(int pointSize) 
        {
            this.pointSize = pointSize;
            DesignPattern.FormMain.OutputInfo(this.symbol + " (pointsize " + this.pointSize + ")"); 
        }
    }
    
    // ... C, D, E, etc. 
    
    // "ConcreteFlyweight" 
    class CharacterZ : Character 
    {
        // Constructor 
        public CharacterZ() 
        {
            this.symbol = 'Z'; 
            this.height = 100;
            this.width = 100;
            this.ascent = 68; 
            this.descent = 0; 
        }

        public override void Display(int pointSize)
        {
            this.pointSize = pointSize; 
            DesignPattern.FormMain.OutputInfo(this.symbol + " (pointsize " + this.pointSize + ")");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -