1. 程式人生 > >c#設計模式之享元模式

c#設計模式之享元模式

//類似單例模式加上工廠模式,避免大量建立物件帶來的記憶體消耗


using System;
using System.Collections;

public abstract class charactor
{
    protected char _symbol;

    public abstract void display();
}

public class charactorA : charactor
{
    public charactorA()
    {
        this._symbol = 'A';
    }

    public override void display()
    {
        Console.WriteLine(this._symbol);
    }

}

public class charactorB : charactor
{
    public charactorB()
    {
        this._symbol = 'B';
    }
    public override void display()
    {
        Console.WriteLine(this._symbol);
    }
}


public class charactorFactory
{

    private static Hashtable charactors = new Hashtable();
       
       private charactorFactory(){}


    public static charactor getCharactor(string key)
    {
        charactor ch = charactors[key] as charactor;

        if(null == ch)
        {
            switch(key)
            {
                case "A":
                    ch = new charactorA();
                    break;
                case "B":
                    ch = new charactorB();
                    break;
            }

            charactors.Add(key,ch);
        }
        return ch;
    }
}


class Program
{
    static void Main(string[] args)
    {
        charactorA a = (charactorA)charactorFactory.getCharactor("A");

        a.display();
        
        charactorB b = (charactorB)charactorFactory.getCharactor("B");

        b.display();

        charactorB c = (charactorB)charactorFactory.getCharactor("B");

        c.display();

        Console.ReadKey();
    }
}