zoukankan      html  css  js  c++  java
  • 设计模式(十七):享元模式

    一、定义

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

    二、实例

    首先,有个享元超类

     public abstract class Website
        {
            public int websiteid;
            public Website(int _websiteid)
            {
                websiteid = _websiteid;
            }
            public abstract void Collecter();                
        }

    其次,具体的子类

     public class Mall : Website
        {
            public Mall(int _websiteid) : base(_websiteid)
            {
            }
            public override void Collecter()
            {
                Console.WriteLine("商城.");
            }
        }

    最后,要一个享元工厂

     public class WebsiteFactory
        {
            private Hashtable websites = new Hashtable();
            public Website GetWebsiteByID(int key)
            {
                if (!websites.ContainsKey(key))
                    websites.Add(key, new Mall(key));
                return (Website)websites[key];
            }
        }

    客户端:

    //------------------------享元模式------------------------
                Flyweight.WebsiteFactory factory = new Flyweight.WebsiteFactory();
                Flyweight.Website web_1= factory.GetWebsiteByID(1);
                web_1.Collecter();
    
                Flyweight.Website web_2 = factory.GetWebsiteByID(2);
                web_2.Collecter();
    
                Flyweight.Website web_3 = factory.GetWebsiteByID(2);
                web_3.Collecter();

    三、总结

    1、享元模式VS单例模式

    享元是对象级别的, 也就是说在多个使用到这个对象的地方都只需要使用这一个对象即可满足要求,
    而单例是类级别的, 就是说这个类必须只能实例化出来一个对象,
    可以这么说, 单例是享元的一种特例,
    设计模式不用拘泥于具体代码, 代码实现可能有n多种方式, 而单例可以看做是享元的实现方式中的一种, 但是他比享元更加严格的控制了对象的唯一性

    2、应用环境

    程序中应用了大量的对象,造成了很大的存储空间,并且这些对象可以根据外部环境的参数进行区分。

  • 相关阅读:
    javascript弹出窗口代码
    DOM的核心: Node
    AjaxControlToolkit学习系列(1) DragPanelExtender
    nodeName、nodeValue 以及 nodeType 简单解析
    AjaxControlToolkit学习系列(3) AnimationExtender
    childNodes
    javascript面向对象技术基础(四)
    自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图<原创>
    ADO.NET朝花夕拾(一)
    javascript面向对象技术基础(三)
  • 原文地址:https://www.cnblogs.com/sunchong/p/5146104.html
Copyright © 2011-2022 走看看