简述单例设计模式的一些理解及代码实现

单例设计模式

从特征上讲:
1,单例类只可有一个实例
2,单例类需自己创建唯一实例
3,需要给其他对象提供这一实例

从作用和目的上来说:
保证在应用程序中,一个类只有一个实例存在

代码格式上来讲:
1,私有的构造函数
2,私有的静态的全局变量
3,公有的静态的方法

从形式上来说有以下几种:
懒汉式:使用的时候再实例化(延时加载)
代码实现 (线程不安全,但效率高)
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
线程安全的懒汉式
public class Singleton{
private static Singleton instance;
private Singleton(){};
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}

饿汉式(线程安全,jvm启动,不论你使不使用都先实例化,写法简单,不用考虑多线程问题,但效率低)
代码实现:
public class Singleton{
private static Singleton instance=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}

双重校验锁
public class Singleton {
private volatile static Singleton instance;
private Singleton (){}
public static Singleton getIntance() {
if (instance== null) {
synchronized (Singleton.class) {
if (instance== null) {
instance= new Singleton();
}
}
}
return instance;
}
}

还有一种登记式单例类,因为不常用(ps:主要是我也不会),在这就不写了;

再随便说一下比较常见的应用场景:
常见应用场景多见于日志,应用配置,网站计数器什么的;
使用条件:
资源共享情况下,用它避免一些资源操作时导致的性能损耗和资源浪费

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值