zoukankan      html  css  js  c++  java
  • 设计模式之—享元模式<FlyWeight>

    享元模式:运用共享技术有效的支持大量细微度的对象。以减少对象的实例个数,减少服务器的负担

    内部状态与外部状态:

    测试用例UML图

    用户类(User):外部状态

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Flyweight.CLASS
    {
        public class User
        {
            private string name;
            public User(string name)
            {
                this.name = name;
            }
            public string Name
            {
                get { return name; }
            }
        }
    }
    View Code

    网站抽象类(WebSite)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Flyweight.CLASS
    {
        abstract class WebSite
        {
            public abstract void Use(User user);
        }
    }
    View Code

    具体网站(ConcreateWebSite)继承于WebSite   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Flyweight.CLASS
    {
        class ConcreateWebSite :WebSite
        {
            private string name = string.Empty;
            public ConcreateWebSite(string name)
            {
                this.name = name;
            }
    
            public override void Use(User user)
            {
                Console.WriteLine("网站分类:" + name + " 用户:" + user.Name );
            }
        }
    }
    View Code

    网站工厂类(WebSiteFactory)哈希实现类实例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections; //哈希表引用
    
    namespace Flyweight.CLASS
    {
        class WebSiteFactory
        {
            //哈希实例类
            private Hashtable flyweights = new Hashtable();
            public WebSite GetWebSiteCategory(string key)
            {
                if (!flyweights.ContainsKey(key))
                {
                    flyweights.Add(key, new ConcreateWebSite(key));
                }
                return ((WebSite)flyweights[key]);
            }
            
            //返回实例总数
            public int GetWebSiteConut()
            {
                return flyweights.Count;
            }
    
        }
    }
    View Code

    测试类(TestMain)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Flyweight.CLASS;
    namespace Flyweight
    {
        class TestMain
        {
            static void Main(string[] args)
            {
                WebSiteFactory factory = new WebSiteFactory();
                WebSite web1 = factory.GetWebSiteCategory("产品展示");
                web1.Use(new User("小张"));
    
                WebSite web2 = factory.GetWebSiteCategory("产品展示");
                web2.Use(new User("小李"));
    
                WebSite web3 = factory.GetWebSiteCategory("产品展示");
                web3.Use(new User("小王"));
    
                WebSite web4 = factory.GetWebSiteCategory("博客");
                web4.Use(new User("小赵"));
    
                WebSite web5 = factory.GetWebSiteCategory("博客");
                web5.Use(new User("小胡"));
    
                Console.WriteLine("网站实例个数为{0}个",factory.GetWebSiteConut());
                Console.ReadLine();
            }
        }
    }
    View Code

    测试结果:实例数为2

    要么忍,要么狠,要么滚!
  • 相关阅读:
    软件工程作业------分析文本文档,统计出现频率最多的十个单词
    关于IBOutlet的生命周期
    重装iTunes 错误代码42401 解决办法
    关于在多个UItextield切换焦点
    关于如何使用代码触发 UIButton的Unwind Segue
    NSFileManager在初始化文件的时候一不留神就进入陷阱
    Xcode的编辑利器Xvim,如何去掉烦人工具栏和文件路径
    __weak 和 __strong 还有Autorelease的用法
    关于NSFetchedResultsController的一些用法
    关于MVC模型的NSNotification用法
  • 原文地址:https://www.cnblogs.com/zxd543/p/3307060.html
Copyright © 2011-2022 走看看