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、应用环境

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

  • 相关阅读:
    c# 得到 XML的节点值和属性值
    jquery 更改超链接
    row_number()得到中间的信息
    UML系统分析与设计03-软件需求分析说明书
    UML系统分析与设计02-用例图和活动图(下)
    从Klocwork中.net检测项说说代码书写
    WCF之诡异通讯超时
    《Beginning WF : Windows Workflow in .NET 4.0》读书笔记
    UML系统分析与设计01-准备
    UML系统分析与设计02-用例图和活动图(上)
  • 原文地址:https://www.cnblogs.com/sunchong/p/5146104.html
Copyright © 2011-2022 走看看