zoukankan      html  css  js  c++  java
  • 单件模式

    单件模式(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

     

  • 相关阅读:
    Thinkd Pad打开无线网络方法
    模式问题
    SQL数据库,使用事务执行增删改操作,给自己一个后悔的机会
    iOS开发-数据库FMDB队列
    iOS开发-数据库FMDB简单介绍
    iOS开发-地图定位 CoreLocation地理编码
    iOS开发-网络篇 文件的上传
    iOS开发-项目新特性
    iOS开发-Xcode插件管理工具Alcatraz的安装和使用
    iOS开发-AFNetworking 怎样上传数据? 怎样上传模拟表单
  • 原文地址:https://www.cnblogs.com/yuanws/p/1341532.html
Copyright © 2011-2022 走看看