Administrator
发布于 2024-08-03 / 53 阅读
0
0

享元模式

问题描述

菜鸟的朋友们都希望提供定制的网站,有的希望是新闻发布形式的、有的希望是博客形式的、有的希望是产品图片加说明形式的,但是都希望费用上能大大降低。如果每个网站都独立租用空间费用上基本不能减低,而且维护众多网站的代码需要投入很大的时间和精力。

代码实现

    public class User
    {
        private string mName;
        public User(string name)
        {
            mName = name;
        }

        public string Name { get { return mName; } }
    }

    public abstract class WebSite
    { 
        public abstract void Use(User user);
    }

    public class ConcreteWebSite : WebSite
    {
        private string mName = "";
        public ConcreteWebSite(string name)
        {
            mName = name;
        }
        public override void Use(User user)
        {
            Console.WriteLine($"网站分类:{mName} , 用户:{user.Name}");
        }

    }

    class WebSiteFactory
    {
        private Dictionary<string,WebSite>WebSiteDict = new Dictionary<string, WebSite> ();

        public WebSite GetWebSite(string name)
        {
            if(!WebSiteDict.ContainsKey (name))
                WebSiteDict.Add (name, new ConcreteWebSite(name));
            return WebSiteDict[name];
        }

        public int GetWebSiteCount()
        {
            return WebSiteDict.Count;
        }

    }

    internal class Program
    {
        static void Main(string[] args)
        {
            WebSiteFactory webSiteFactory = new WebSiteFactory ();
            WebSite fx = webSiteFactory.GetWebSite("产品展示");
            fx.Use(new User("小菜"));

            WebSite fy = webSiteFactory.GetWebSite("产品展示");
            fy.Use(new User("大鸟"));

            WebSite fb = webSiteFactory.GetWebSite("博客");
            fb.Use(new User("老顽童"));

            WebSite fc = webSiteFactory.GetWebSite("博客");
            fc.Use(new User("桃谷六仙"));

            Console.WriteLine($"网站分类总数为{webSiteFactory.GetWebSiteCount()}");
        }
    }

UML图


评论