• 二十八.享元模式


    享元模式:

           Flyweight:运用共享技术有效地支持大量细粒度的对象

     

    注意:

    如果一个应用程序使用了大量的对象,而大量的这些对象造成很大的存储开销时就要考虑使用;

    对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以使用相对较少的共享对象取代很多组对象,此时可以考虑使用。

           实际上在.NET中,字符串string就是运用了Flyweight模式。Object.ReferenceEquals(objectobjA,object objB)方法是用来确定objA和objB是否是相同实例,返回bool值:

           StringA=”设计模式”;

           StringB=”设计模式”;

          Console.WriteLine(Object.ReferenceEquals(A,B));

           返回值是True,这两个字符串是相同实例

           如在围棋,象棋,五子棋等游戏开发时,我们只要实例化一个棋子对象,把棋子颜色,坐标等作为棋子的外部状态。

    Demo1

           Using System.Collections;

           class WebSiteFactory//网站工厂

        {

           private Hashtable flyweights = new Hashtable();

           //获得网站分类

           public WebSite GetWebSiteCategory(stringkey)

           {

               if (!flyweights.ContainsKey(key))

               {

                    flyweights.Add(key,newConcreteWebSite(key));

               }

                return ((WebSite)flyweights[key]);

           }

           //获取网站总数

           public int GetWebSiteCount()

           {

               return flyweights.Count;

           }

        }

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

           }

        }

    //用户 

        public class User

        {

           private string name;

           public User(string name)

           {

               this.name = name;

           }

           public string Name

           {

               get { return name; }

           }

        }

    static void Main(string[]args)

           {

               WebSiteFactory f = new WebSiteFactory();

               WebSite fx = f.GetWebSiteCategory("产品展示");

               fx.Use(new User("小菜"));

               WebSite fy = f.GetWebSiteCategory("产品展示");

               fy.Use(new User("大鸟"));

               WebSite fz = f.GetWebSiteCategory("产品展示");

               fz.Use(new User("娇娇"));

               WebSite f1 = f.GetWebSiteCategory("博客");

               f1.Use(new User("老顽童"));

               WebSite f2 =f.GetWebSiteCategory("博客");

               f2.Use(new User("桃谷六仙"));

               WebSite f3 = f.GetWebSiteCategory("博客");

               f3.Use(new User("南海鳄神"));

               Console.WriteLine("网站分类总数为{0}", f.GetWebSiteCount());

               Console.ReadKey();

           }

  • 相关阅读:
    Lua 学习之基础篇七<Lua Module,Package介绍>
    Lua 学习之基础篇六<Lua IO 库>
    Lua 学习之基础篇五<Lua OS 库>
    Lua 学习之基础篇四<Lua table(表)>
    Lua 学习之基础篇三<Lua 字符串操作>
    时空穿梭
    【集训队作业】line
    动态几何问题
    博弈论与概率统计
    wombats
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815257.html
Copyright © 2020-2023  润新知