如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
来源:互联网 发布:ubuntu iso镜像安装 编辑:程序博客网 时间:2024/05/21 03:55
有时候我们常常要在多处使用某一个类里的方法,但是若每一处都new一个实例实在是很耗系统资源的。这样重复的定义式很浪费,这时编程中的“单例模式”就应运而生了。
单例模式的特点就是虽然在多处使用,但使用的却是一个实例,请看下面代码它是如何办到的
using System;using System.Collections.Generic;using System.Text;namespace 单例模式{ class Program { static void Main(string[] args) { Singleton s1 = Singleton.GetInstance(); Singleton s2 = Singleton.GetInstance(); if (s1 == s2) { Console.WriteLine("Objects are the same instance"); } Console.Read(); } } class Singleton { private static Singleton instance; private static readonly object syncRoot = new object(); //将构造函数弄成private,使得无法通过new来实例化这个类 private Singleton() { } public static Singleton GetInstance() { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } }}
运行的结果输出:
Objects are the same instance
定义一个单例模式的类需要以下两步:
第一步:将其无参构造函数定义成pirvate类型,使得外部调用时无法通过new定义一个无参的实例对象
private Singleton() { }
第二步:定义一个public static类型的方法,这个方法返回的类型是这个类的类型。这个方法的作用就是实例化对象,若对象为空,则new一个实例,否则返回当前实例。
public static Singleton GetInstance() { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; }
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- 利用单例模式,解决toast重复弹出的问题
- 单例模式——解决MDI子窗体实例化的问题
- C#设计模式—单例模式
- java多线程-单例设计模式的问题及解决
- 设计模式的实际应用——在C#中解决单客户端窗口数据并发问题
- C#设计模式-单例实例
- C# 单实例设计模式
- 单例设计模式的实现代码
- 设计模式之单例模式的优化
- 单例模式解决多线程的问题
- Java单实例对象或单例模式下的同步问题
- Java单实例对象或单例模式下的同步问题
- 设计模式之一:单例模式—确保对象的唯一性
- 面向对象的设计模式(一),单例模式
- Java设计模式:单例模式-独一无二的对象
- 设计模式之单例模式二(解决无序写入的问题)
- 单例设计模式的相关问题
- 视频相关的几个开源软件的授权
- Android上的Google Map 开发总结
- 2011.9.26 多云
- windows live messenger 2009登录失败,提示“错误代码:81000605”的一个解决办法
- C++ [ 共享数据保护 ]
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- Android-MMS中彩信附件的格式及分析
- Sharepoint 弹出消息提示框
- QT编写中碰到:找不到批处理文件
- Android之Toast的用法
- log4j 配置
- 学习重要,还是经营人脉重要?(转自李笑来)
- Javascript的Defer属性
- [转]Ultra Fractal教程系列49——动画功能的使用07——颜色渐变动画