C#设计模式之---享元模式

这篇具有很好参考价值的文章主要介绍了C#设计模式之---享元模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型模式,是运用共享技术有效的支持大量细粒度的对象。它使用共享对象,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似对象;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量对象。通常对象中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。Flyweight模式需要认真考虑如何能细化对象,以减少处理的对象数量,从而减少存留对象在内存或其他存储设备中的占用量。String常量池、数据库连接池、缓冲池等等都是享元模式的应用。

using System;
using System.Text;
using System.Collections.Generic;
using System.Collections;
namespace ConsoleApplication
{
    public interface IDbConnectionPool
    {
        //设定连接池中存放连接的数目
        void SetMaxConns(int numConnections);
        //设定打开或者关闭连接池
        void SetConnWitch(string Switch);
        //产生连接池
        void InitConnPool();
        //从连接池获取连接
        Connection GetConnection();
        //将连接返回给连接池
        void ReturnConnection();
        //销毁连接池
        void DestroyConnPool();
    }
    public class Connection
    {
        public int Id { get; set; }
        public string Database { get; set; }
        public int ConnectionTimeout { get; set; }
        public string DataSource { get; set; }
        public string Provider { get; set; }
    }
    public class GdDbConnectionPool : IDbConnectionPool
    {
        private static string connectionString =
            @"server=(local);Trusted Connection=yes;database=myDB";
        //默认连接池的大小
        const int defaultMaxConnections = 10;
        //存放目前空闲的连接,空闲池
        private List<Connection> freeConnections;
        //存放目前正在使用的连接
        private List<Connection> busyConnections;
        //设定连接池的大小
        private int maxConnections;
        //构造函数
        public GdDbConnectionPool(int numConnections)
        {
            maxConnections = numConnections;
            freeConnections = null;
            busyConnections = null;
        }

        #region 实现获取数据库连接的操作
        /// <summary>
        /// 实现获取数据库连接的操作
        /// </summary>
        /// <returns></returns>
        public Connection GetConnection()
        {
            if (freeConnections == null)
            {
                throw new Exception("连接池还没有创建");
            }
            Console.WriteLine("------获取数据库连接的操作------");
            //获取空闲池连接
            Connection conn = (Connection)freeConnections[0];
            freeConnections.Remove(conn);
            busyConnections.Add(conn);
            return conn;
        }
        #endregion
        #region 产生连接池
        /// <summary>
        /// 产生连接池
        /// </summary>
        public void InitConnPool()
        {
            Console.WriteLine("------数据库连接的初始化------");
            freeConnections = new List<Connection>(maxConnections);
            busyConnections = new List<Connection>(maxConnections);
            for (int i = 0; i < maxConnections; i++)
            {
                freeConnections.Add(new Connection() { Id = i });
            }
        }
        #endregion
        #region 从繁忙池中销毁已经返回的连接
        /// <summary>
        /// 从繁忙池中销毁已经返回的连接
        /// </summary>
        public void ReturnConnection()
        {
            Connection conn = (Connection)busyConnections[0];
            if (conn == null)
                throw new Exception("没有发现繁忙池中有连接");
            busyConnections.Remove(conn);
            freeConnections.Add(conn);
            Console.WriteLine("------从繁忙池中销毁已经返回的连接------");
        }
        public void SetMaxConns(int numConnections)
        {
            throw new NotImplementedException();
        }
        public void SetConnWitch(string Switch)
        {
            throw new NotImplementedException();
        }
        public void DestroyConnPool()
        {
            throw new NotImplementedException();
        }
        #endregion
    }
    class Program
    {
        static void Main(string[] args)
        {
            GdDbConnectionPool cpl = new GdDbConnectionPool(10);
            cpl.InitConnPool();
            cpl.GetConnection();
            cpl.ReturnConnection();
            Console.ReadKey();
        }
    }
}

 文章来源地址https://www.toymoban.com/news/detail-595475.html

到了这里,关于C#设计模式之---享元模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式:享元模式

    首先我们需要简单了解一下什么是享元模式。 享元模式(Flyweight Pattern) :主要用于减少创建对象的数量,以减少内存占用和提高性能。享元模式的重点就在这个享字,通过一些共享技术来减少对象的创建,实际上Java中String值的存储,Volley中的 ByteArrayPool 也使用到了享元模式,

    2024年02月08日
    浏览(44)
  • 设计模式-享元模式

    享元模式(Flyweight Pattern)是一种结构型设计模式,主要用于减少创建大量相似对象对内存资源的消耗,通过共享这些对象来提高程序性能和系统资源利用率。在实际应用场景中string就是使用了享元模式,string a = “123”; string b = “123”; 我们假设有一个场景是需要创建大量的

    2024年01月24日
    浏览(42)
  • 设计模式(22)享元模式

    一、介绍: 1、定义:享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 2、组成结构: (1)Flyweight(抽象享元类):通常是一个接口或

    2024年02月07日
    浏览(42)
  • 设计模式-享元模式(Flyweight)

    享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目标是减少应用程序中对象的数量,以节省内存和提高性能。这一模式适用于对象数量庞大且相似的情况,通过共享内部状态来减少对象的创建。 在本篇博客中,我们将详细介绍享元模式的概念,并提供一个简单的

    2024年02月09日
    浏览(42)
  • 【23种设计模式】享元模式【⭐】

    个人主页 :金鳞踏雨 个人简介 :大家好,我是 金鳞 ,一个初出茅庐的Java小白 目前状况 :22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客 :这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进

    2024年02月09日
    浏览(47)
  • Java设计模式-享元模式

    在Java领域的软件开发中,设计模式是提高代码可维护性和可扩展性的重要工具。其中,享元模式是一种被广泛使用的设计模式,它通过优化对象的重用来提升系统性能。 享元模式是一种结构型设计模式,旨在通过共享对象来减少系统中的对象数量,从而提升性能和减少内存

    2024年02月06日
    浏览(38)
  • 【前端设计模式】之享元模式

    享元模式是一种结构型设计模式,它通过共享对象来减少内存使用和提高性能。在前端开发中,享元模式可以用于优化大量相似对象的创建和管理,从而提高页面的加载速度和用户体验。 共享对象:享元模式通过共享相似对象来减少内存使用。相似对象可以共享一些不变的状

    2024年02月08日
    浏览(48)
  • js设计模式:享元模式

    当需要处理很多非常类似操作的时候,可以创建可以共享的对象,并暴露接口供其他对象调用 这个对象内包含这些操作的处理逻辑,可以优化性能  

    2024年02月22日
    浏览(39)
  • 设计模式之享元模式

    本文看下一种结构型设计模式,享元模式。 当程序需要大量的重复对象,并且这些大量的重复对象只有部分属性不相同,其他都是相同的时候,就可以考虑使用享元设计模式设计模式来实现。典型的如围棋游戏中的棋子,除了颜色和位置不同外,其他都相同。射击游戏中的子

    2024年02月17日
    浏览(43)
  • 【设计模式-08】Flyweight享元模式

    简要的理解:享元模式就是新建一个池(Pool),该池子(Pool)中有新建好的一堆对象,当需要使用时,从池子(Pool)中直接获取,不用重新新建一个对象。通俗的讲就是: 共享元数据 。 比如Java中的String就是使用享元模式,String的值存储在一个内存池中,不用每次分配一个内存存储

    2024年01月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包