【設計模式】之享元模式

  • UML

  • 舉例

//用戶
    class User
    {
        private string name;
        public User(string name)
        {
            this.Name = name;
        }

        public string Name { get => name; set => name = value; }
    }
//網站抽象類
    abstract class WebSite
    {
        public abstract void Use(User user);
    }
//網站具體類
    class ConcreteWebSite : WebSite
    {
        private string name = "";

        public ConcreteWebSite(string name)
        {
            this.name = name;
        }

        //使用
        public override void Use(User user)
        {
            Console.WriteLine("網站分類:" + name + " 用戶:" + user.Name);
        }
    }
//網站工廠
    class WebSiteFactory
    {
        private Hashtable hashtable = new Hashtable();

        //獲得網站分類
        public WebSite GetWebSite(string key)
        {
            //如果不存在,則創建
            if(hashtable.Contains(key)==false)
            {
                hashtable.Add(key, new ConcreteWebSite(key));
            }
            return (WebSite)hashtable[key];
        }

        //獲得網站數量
        public int GetWebSiteCount()
        {
            return hashtable.Count;
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            WebSiteFactory webSiteFactory = new WebSiteFactory();
            WebSite w1 = webSiteFactory.GetWebSite("博客");
            w1.Use(new User("小明"));

            WebSite w2 = webSiteFactory.GetWebSite("博客");
            w1.Use(new User("小紅"));

            WebSite w3 = webSiteFactory.GetWebSite("學習");
            w3.Use(new User("小蘭"));

            WebSite w4 = webSiteFactory.GetWebSite("學習");
            w3.Use(new User("小芳"));

            Console.WriteLine($"{webSiteFactory.GetWebSiteCount()}");
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章