java 单例设计模式

设计模式

什么是设计模式?

1. 基本定义:设计模式(Design pattern)是一套被反复使用的代码设计经验的总结。使用设计模式的目的是为了可重用代码、让代码更容易被他人理解。设计模式是是软件工程的基石脉络,如大厦的结构一样。
2. Design pattern的四大要素:模式名称(Name),问题(Question),解决方案(Solution),效果(Efftive)。

java 语言有23种设计模式

单例设计模式

Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例、饿汉式单例。
1 特点
1. 单例类只能有一个实例。
2. 私有构造方法
3. 单例类必须自己创建自己的唯一实例。
4. 单例类必须给所有其他对象提供这一实例。

2 常用的单例模式写法
  2.1. 懒汉式单例:在第一次调用的时候实例化自己;
   1. 懒汉式1:线程不安全
  
        public class Singleton {  
              private Singleton() {}//私有构造行数,避免类在外部被实例化
              private static Singleton single=null;  
              //静态工厂方法
              public static Singleton getInstance() {  
                   if (single == null) {    
                       single = new Singleton();  
                   } 
                  return single;  
              } 
          }

   2. 懒汉式2:在getInstance方法上加同步,使得线程安全
      
    public class Singleton {  
              private Singleton() {}//私有构造行数,避免类在外部被实例化
              private static Singleton single=null;  
              //静态工厂方法 加上了同步,使得线程安全
              public static synchronized Singleton getInstance() {  
                   if (single == null) {    
                       single = new Singleton();  
                   }    
                  return single;  
              }
          }
   3. 懒汉式3:双重检查锁定,线程安全
       
   public class Singleton {  
              private Singleton() {}//私有构造行数,避免类在外部被实例化
              private static Singleton single=null;
            
          	public static Singleton getInstance() {  
                  if (singleton == null) {    
                      synchronized (Singleton.class) {//同步锁住,使得线程安全  
                         if (singleton == null) {    
                            singleton = new Singleton();   
                         }    
                      }    
                  }
                  return singleton;   
          	}
          }
   4. 懒汉式4:静态内部类,线程安全。因为内部在第一次调用的时候,类只会被加载一次。
      
    public class Singleton {
              private static class LazyHolder {
                 private static final Singleton INSTANCE = new Singleton();   
              } 
              private Singleton (){}//私有构造函数
              public static final Singleton getInstance() {    
                 return LazyHolder.INSTANCE;    
              }    
          }

2.2. 饿汉式单例:在类初始化时,已经自行实例化   
     
  public class Singleton1 {  
           private Singleton1() {}//私有构造函数 
           private static final Singleton1 single = new Singleton1(); 
           //静态工厂方法   
           public static Singleton1 getInstance() {  
               return single;  
           }  
       }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值