zoukankan      html  css  js  c++  java
  • 享元模式

    享元模式(英语:Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

    代码1:享元,可以复用的对象

       //网站
        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);
            }
        }
    

    代码2:辅助类

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

    代码3:享元工厂

    //网站工厂
        class WebSiteFactory
        {
            private Hashtable flyweights = new Hashtable();
    
            //获得网站分类
            public WebSite GetWebSiteCategory(string key)
            {
                if (!flyweights.ContainsKey(key))
                    flyweights.Add(key, new ConcreteWebSite(key));
                return ((WebSite)flyweights[key]);
            }
    
            //获得网站分类总数
            public int GetWebSiteCount()
            {
                return flyweights.Count;
            }
        }
    

    代码4:客户端

     class Program
        {
            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 fl = f.GetWebSiteCategory("博客");
                fl.Use(new User("老顽童"));
    
                WebSite fm = f.GetWebSiteCategory("博客");
                fm.Use(new User("桃谷六仙"));
    
                WebSite fn = f.GetWebSiteCategory("博客");
                fn.Use(new User("南海鳄神"));
    
                Console.WriteLine("得到网站分类总数为 {0}", f.GetWebSiteCount());
    
                //string titleA = "大话设计模式";
                //string titleB = "大话设计模式";
    
                //Console.WriteLine(Object.ReferenceEquals(titleA, titleB));
    
    
                Console.Read();
            }
        }
    

      

  • 相关阅读:
    点击对话框非标题栏可以移动对话框
    键盘按键的处理和单字节的判断,不允许输入汉字
    MFC 打开网页
    那些坑爹的python面试题
    jQuery上传插件uploadify
    jQuery插件之我的flexiGrid
    浏览器常见兼容点
    jQuery之右键菜单
    javascript调用函数的几种方法
    JavaScript的匿名函数和闭包【转帖】
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3361671.html
Copyright © 2011-2022 走看看