单例模式
https://www.cnblogs.com/abcdwxc/archive/2007/10/30/942834.html
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例,即提供一个访问他的全局访问点。
-
静态Singleton实现(推荐)
public class Static_Singleton {
//创建 Static_Singleton 的一个对象
public static readonly Static_Singleton instance = new Static_Singleton();
//让构造函数为 private,这样该类就不会被实例化
private Static_Singleton(){}
}
}
//从Static_Singleton中获取唯一的对象
public class SingletonPatternDemo {
public static void main(String[] args) {
//获取唯一可用的对象
Static_Singleton object = Static_Singleton.instance;
}
}
-
单线程Singleton实现
class SingleThread_Singleton
{
private static SingleThread_Singleton instance = null;
private SingleThread_Singleton(){}
public static SingleThread_Singleton Instance
{
get
{
if (instance == null)
{
instance = new SingleThread_Singleton();
}
return instance;
}
}
}
-
多线程Singleton实现
class MultiThread_Singleton
//volatile 保证严格意义的多线程编译器在代码编译时对指令不进行微调。
//如果去掉这个关键字,还是有可能发生线程不是安全的。
private static volatile MultiThread_Singleton instance = null;
private static object lockHelper = new object();
private MultiThread_Singleton() { }
public static MultiThread_Singleton Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new MultiThread_Singleton();
}
}
}
return instance;
}
}
-
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
public class SingletonPatternDemo {
public static void main(String[] args) {
//获取唯一可用的对象
Singleton object = Singleton.getInstance();
}
}
优点:
- 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
- 2、避免对资源的多重占用(比如写文件操作)。
缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!