c# 不同单例的不同意义
前言
在c#,可能有很多五花八门的单例给你选择,分什么懒汉模式等等什么模式,其实不同的写法对程序是有一定影响的。
正文
为什么需要单例呢?其实我们自己是可以控制单例的,只是单例模式给了我们一个好的设计。
我想没有会下面这样写:
void main()
{
var obj=new good();
obj.show();
var obj=new good();
obj.show();
}
但是有可能下面这样写:
public class a
{
public void showa()
{
var obj=new good();
obj.show();
}
}
public class b
{
public void showb()
{
var obj=new good();
obj.show();
}
}
void main()
{
var a=new a();
a.showa();
var b=new b();
b.showb();
}
这时候可能就浪费资源了,单例模式给了我们一个好的设计。
有下面几种方式:
方式一
public class good{
private good(){
do some thing
}
private good __good;
private static object lockobj=new object();
public good createinstance()
{
if(__good==null)
{
lock(lockobj)
{
if(__good==null)
{
__good=new good();
}
}
}
}
}
方式二
public class good{
private good(){
do some thing
}
private static good __good=new good();
public good createinstance()
{
return __good;
}
}
方式三
public class good{
private good(){
do some thing
}
private good __good;
private static good()
{
__good=new good();
}
public good createinstance()
{
return __good;
}
}
不同之处
第一种是普通模式。
用完了资源就会被cg释放。
第二种和第三种会一直存在内存中,由clr控制。
c# 不同单例的不同意义的更多相关文章
- 单例-b
这个比较老了,是mrc 里面的 此例以模仿Apple官方文档的单例写出来的.但是一直有一个非常不明白的地方,就是alloc与allocWithZone:的重载中,为什么要return [[self c ...
- Spring IOC 容器源码分析 - 获取单例 bean
1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...
- 设计模式(java) 单例模式 单例类
·单例类 单实例类,就是这个类只能创建一个对象,保证了对象实例的唯一性. 1.单例模式( Singleton Pattern) 是一个比较简单的模式, 其定义如下:Ensure a class has ...
- php 设计模式 - 单例
概述: 作为对象的创建模式,单例确保某一个内在系统中只存在一个实例,它不可以创建副本. 克隆函数(__clone )以及构造函数(__construct )必须声明为私用, 防止外部程序 创建一个新类 ...
- 利用dispatch_once创建单例
无论是爱还是恨,你都需要单例.实际上每个iOS或Mac OS应用都至少会有UIApplication或NSApplication. 什么是单例呢?Wikipedia是如此定义的: 在软件工程中,单例 ...
- 《JAVA笔记 day08 静态_单例》
//static关键字: /* 静态方法的使用注意事项: 1,静态方法不能访问非静态的成员. 但是非静态是可以访问静态成员的. 说明:静态的弊端在于访问出现了局限性.好处是可以直接别类名调用. 2,静 ...
- Java单例类的简单实现
对于java新手来说,单例类给我的印象挺深,之前一道web后台笔试题就是写单例类.*.*可惜当时不了解. 在大部分时候,我们将类的构造器定义成public访问权限,允许任何类自由创建该类的对象.但在某 ...
- 从一个简单的Java单例示例谈谈并发
一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...
- 创建类模式(五):单例(Singleton)
定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式一般情况下通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化. 和静态变量的区别 虽然 ...
随机推荐
- oracle删除会话
create procedure killsessionas --set serveroutput on; --in oracle sql developer this cannot be ignor ...
- el-table合理应用ref属性,使el-input获得焦点
全篇不着一丝文字痕迹,仅记录而已
- Liquibase使用小结
简介 Liquibase是一个用于跟踪.管理和应用数据库变化的开源数据库重构工具.它将所有数据库的变化保存在XML文件中,便于版本控制和项目部署升级.在快速搭建项目的JHipster框架中集成了该工具 ...
- 程序员使用IDEA这些插件后,办公效率提升100%(持续更新中)
IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckSt ...
- shiro配置springboot的基本配置
标准配置 对比 https://www.cnblogs.com/xiaozhang666/p/12058341.html 的对应注入查看 package com.zys.sys.config; im ...
- Mysql添加更新删除数据-表
例如 此处拥有一个表名为 uuser 为表添加新数据 ,'); ,'); ,'); 假如只想添加uid和uname ,'小张'); 那么pas自动填充为NULL. 为表更新数据 这里把小王的pas改成 ...
- Unity实现写入json文件
using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using ...
- Azure Kubernetes 服务 (AKS)
一.首先创建集群 1,注意:一定要选择Kubernets Service(红框处),上面的那一堆虚拟机都没有用, 2,设置好相关属性,集群大小可后面更改节点数,但是节点的大小不可更改 二.登陆集群 在 ...
- Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream
Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream 一.介绍 ByteArrayInputStream 和 ByteArrayOutputSt ...
- ERROR: ...hbase.PleaseHoldException: Master is initializing
同学升级HBase后遇到这个问题,hbase shell,status就可以看到 ERROR: -hbase.PleaseHoldException: Master is initializing 解 ...