单例模式的实现类只允许有一个类的实例并且提供了个全局指针来引用该例子。
想要保证对象唯一。
1,为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象。
2,还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三部怎么用代码体现呢?
1,将构造函数私有化。
2,在类中创建一个本类对象。(私有静态的)
3,提供一个方法可以获取到该对象。
实际开发中对于事物该怎么描述,还怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
1 public final class Single//饿汉式,Single类一进内存,就已经创建好了对象。 2 { 3 private static Single s = new Single();//在类中创建一个私有并静态的本类对象 4 private Single(){}//私有化构造函数 5 public static Single getInstance()//提供一个方法可以获取到该对象 6 { 7 return s; 8 } 9 } 10 11 public final class Single//懒汉式,对象是方法被调用时,才初始化,也叫做对象的延时加载 12 { 13 private static Single s = null; 14 private Single(){} 15 public static Single getInstance() 16 { 17 if(s==null)//检查实例是否存在,如果不存在进入下面的synchronized代码块 18 { 19 synchronized(Single.class) 20 { 21 if(s==null)//拿到锁后再次判断实例是否存在,如果不存在才创建实例 22 s = new Single(); 23 } 24 } 25 return s; 26 } 27 }
注意:
1.该类是一个final类,外部不能继承该类
2.该类的构造方法私有化,使得外部类只能通过getInstance方法获取该类一开始初始化的实例
3.该类在程序中永远只有一个实例,虽然他的属性被其他类不断的改变