• 享元模式


    享元模式:运用共享技术有效地支持大量细粒度的对象

    下面举例说明,假设项目需要创建多个数据库连接,但希望一个数据库只有一个连接实例

    首先定义享元类:

        public abstract class Flayweight
        {
            public abstract void ShowConnectionInfo();
        }
    
        public class SQLDBConnection:Flayweight
        {
            private string Name { get; set; }
    
            public SQLDBConnection(string name)
            {
                Name = name;
            }
    
            public override void ShowConnectionInfo()
            {
                Console.WriteLine("SQL Connection. Name {0}", Name);
            }
        }
    

     下面创建享元工厂,用来创建并管理享元对象。它确保合理的共享享元,当用户请求某个享元时,享元工厂对象提供一个已创建的实例或者创建一个实例提供给用户

        public class FlayweighFactory
        {
            /// <summary>
            /// 已存在的享元对象列表
            /// </summary>
            private Dictionary<string, SQLDBConnection> flayweights=new Dictionary<string,SQLDBConnection>();
    
            public SQLDBConnection GetConnectionByKey(string key)
            {
                //不存在则创建
                if (!flayweights.ContainsKey(key))
                {
                    flayweights.Add(key, new SQLDBConnection(key));
                }
                //返回请求的享元
                return flayweights[key];
            }
    
            public void GetflayweightCount()
            {
                Console.WriteLine("Flayweight Count {0}", flayweights.Count);
            }
        }
    

      客户端调用代码如下:

                FlayweighFactory factory = new FlayweighFactory();
    
                SQLDBConnection OTLConn = factory.GetConnectionByKey("OTLDB");
                SQLDBConnection PAMConn = factory.GetConnectionByKey("PAMDB");
    
                SQLDBConnection OTLConn2 = factory.GetConnectionByKey("OTLDB");
    
                OTLConn.ShowConnectionInfo();
                PAMConn.ShowConnectionInfo();
                OTLConn2.ShowConnectionInfo();
    
                factory.GetflayweightCount();
    

    执行结果如下:

    SQL Connection. Name OTLDB
    SQL Connection. Name PAMDB
    SQL Connection. Name OTLDB
    Flayweight Count 2

    享元模式可以避免大量非常类似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都相同,如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度的减少单个实例的数目。如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销时就应该考虑使用。

     

  • 相关阅读:
    webService理解
    通过ajax.net调用webservice
    .net中调用webservice,post、get方式实现调用
    webservice加载异常
    http 的get,post方式访问url
    dorado
    dorado7中父窗体获取动态生成的iframe中的对象
    dorado中session
    最长公共子序列
    线性DP-数字三角形,最长上升子序列
  • 原文地址:https://www.cnblogs.com/angela217/p/5481936.html
Copyright © 2020-2023  润新知