单例模式的解读以及和全局变量的区别

本文介绍了单例模式的三种实现方式:懒汉式、饿汉式和登记式,并详细解析了单例模式的特性。单例模式确保类只有一个实例,并提供全局访问点。对比全局变量,单例模式能更好地控制实例化过程,而全局变量可能导致多个实例并难以维护。
摘要由CSDN通过智能技术生成

单例模式分为三种:1)、懒汉式单例;

2)、饿汉式单例;

3)、登记式单例

单例模式的三个特点:1)单例类只有一个实例;

(2)、单例类自行创建该类的实例(在该类的内部创建自身的实例对象)

(3)、向整个系统公开这个实例接口;

单例模式用来保证系统中一个类只有一个实例,并且单例类的构造函数必须是私有的,同时单例类必须提供一个全局访问点。


1、一个经典的单例实现。

public class Singleton {

    private static Singleton uniqueInstance = null;

 

    private Singleton() {

       // Exists only to defeat instantiation.

    }

 

    public static Singleton getInstance() {

       if (uniqueInstance == null) {

           uniqueInstance = new Singleton();

       }

       return uniqueInstance;

    }

    // Other methods...

}


2饿汉式单例类

1 //饿汉式单例类.在类初始化时,已经自行实例化

 2 public class Singleton1 {

 3     //私有的默认构造子

 4     private Singleton1() {}

 5     //已经自行实例化

 6     private static final Singleton1 single = new Singleton1();

 7     //静态工厂方法

 8     public static Singleton1 getInstance() {

 9         return single;

10     }

11 }


3懒汉式单例类

 1 //懒汉式单例类.在第一次调用的时候实例化

 2 public class Singleton2 {

 3     //私有的默认构造子

 4     private Singleton2() {}

 5     //注意,这里没有final    

 6     private static Singleton2 single=null;

 7     //静态工厂方法

 8     public synchronized  static Singleton2 getInstance() {

 9          if (single == null) {  

10              single = new Singleton2();

11          }  

12         return single;

13     }

14 }


4懒汉式单例类

 1 //懒汉式单例类.在第一次调用的时候实例化

 2 public class Singleton2 {

 3     //私有的默认构造子

 4     private Singleton2() {}

 5     //注意,这里没有final    

 6     private static Singleton2 single=null;

 7     //静态工厂方法

 8     public synchronized  static Singleton2 getInstance() {

 9          if (single == null) {  

10              single = new Singleton2();

11          }  

12         return single;

13     }

14 }


5、全局变量和单例模式的区别

(1)全局变量是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局访问功能,但是它并不能保证应用程序只有一个实例;编码规范也明确的指出应该要少使用全局变量,因为过多的使用全局变量会造成代码难读;全局变量并不能实现继承。

(2)、单例模式虽然在继承上不能很好的处理,但是还是可以实现继承的;单例模式在类中保存了它的唯实例这个类,可以保证只能创建一个实例,同时它还提供了一个访问该唯一实例的全局访问点。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值