• 单件模式


    单件模式(Singleton) 适用于下面的情况:

    逻辑上仅仅只有一个实例才可以保证逻辑的正确性。

    通过共享减少内存的使用,作为应用中一些集中的统一数据机制存在。

    减少因为频繁的构造过程带来应用上的性能损失

    using System;
    namespace VisionLogic.DesignPattern.Practice
    ...{
    public class Singleton
    ...{
    private static Singleton instance;
    private Singleton() ...{ }
    public static Singleton Instance
    ...{
    get
    ...{
    if (instance == null)
    ...{instance = new Singleton();
    instance.data = 0;
    }
    return instance;
    }
    }
    /**//// <summary>
    /// 共享的实例数据
    /// </summary>
    private int data;
    public int Data
    ...{
    get ...{ return data; }
    set ...{ data = value; }
    }
    }
    }

    using System;
    using System.Diagnostics;
    using VisionLogic.DesignPattern.Practice;
    namespace VisionLogic.DesignPattern.Practice.Client
    ...{
    class Program
    ...{
    static void Main(string[] args)
    ...{
    Singleton instance1 = Singleton.Instance;
    Singleton instance2 = Singleton.Instance;
    instance1.Data = 30;
    Trace.WriteLine(instance2.Data);
    instance2.Data = 15;
    Trace.WriteLine(instance1.Data);
    }
    }
    }
    结果:
    30
    15

    不要实现ICloneable接口或者继承自其相关的子类,否则客户程序可以跳过已经隐蔽起来的类构造函数,导致私有的Singleton() { } 部分的实效。

    using System;
    namespace VisionLogic.DesignPattern.Practice
    ...{
    public class BaseEntity : ICloneable
    ...{
    public object Clone()
    ...{
    return this.MemberwiseClone();
    }
    }
    public class Singleton : BaseEntity
    ...{
    private static Singleton instance;
    private Singleton() ...{ }
    public static Singleton Instance
    ...{
    get
    ...{
    if (instance == null)
    ...{instance = new Singleton();
    instance.data = 0;
    }
    return instance;
    }
    }
    ….
    }
    }

    using System;
    using System.Diagnostics;
    using VisionLogic.DesignPattern.Practice;
    namespace VisionLogic.DesignPattern.Practice.Client
    ...{
    class Program
    ...{
    static void Main(string[] args)
    ...{
    Singleton instance1 = Singleton.Instance;
    Singleton instance2 = (Singleton)instance1.Clone();
    instance1.Data = 30;
    Trace.WriteLine(instance2.Data);
    instance2.Data = 15;
    Trace.WriteLine(instance1.Data);
    }
    }
    }
    结果:
    0
    30

     

  • 相关阅读:
    Hadoop week review
    [Q&A] VS 连接 SQLServer 时未找到或无法访问服务器
    [System] CentOS虚拟机系统克隆后的网络配置
    [Tool] csdn客户端开发(非官方版)
    [MySQL] Win7 下修改 MySQL 5.5 默认编码格式
    [Q&A] MySQL Error 1050(42S01): Table already exist
    [Matlab] libsvmmat 安装
    [SL] Silverlight + WCF Demo项目
    [Q&A] 在证书存储区中找不到清单签名证书
    谷歌浏览器当手机浏览器
  • 原文地址:https://www.cnblogs.com/yuanws/p/1341532.html
Copyright © 2020-2023  润新知