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

    要么忍,要么狠,要么滚!
  • 相关阅读:
    linux内核中听过就能记住的概念
    专治不会看源码的毛病--spring源码解析AOP篇
    接口性能优化方案及其理论依据
    Redis各种数据结构性能数据对比和性能优化实践
    iOS 防止UIButton重复点击
    iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包
    Git简单使用
    软考和软件设计师
    libstdc++适配Xcode10与iOS12
    Objective-C Block与函数指针比较
  • 原文地址:https://www.cnblogs.com/zxd543/p/3307060.html
Copyright © 2011-2022 走看看