第一种
1 package com.atguigu.javase; 2 import java.io.IOException; 3 4 /** 5 * @author _aL0n4k 6 * @version 1.0 7 * @time 2015年9月2日 下午6:12:52 8 */ 9 public class Singleton_HungerMode { //单例模式 - 饥饿式 10 private Singleton_HungerMode() {} //把构造器设置为private,这样就无法在其他内new对象 11 12 private static Singleton_HungerMode singleton = new Singleton_HungerMode(); 13 //只可以在本类创建,这里加上static是因为让方法获取对象,因为不能创建对象, 14 //所以只能通过类名的方式去访问方法获取对象.然后静态方法不能访问非静态方法,所以这里也要写上static 15 //加上private是因为没必要在其他类里面访问他. 16 public static Singleton_HungerMode getSingleton() { 17 //返回创建的对象,加上static是为了在其他类里可以用类名去调用. 18 //访问权限要加上public不然无法在别的类用类名的方式调用该方法 19 return singleton; 20 } 21 } 22 class Singleton_HungerModeTest{ 23 24 public static void main(String[] args) throws IOException { 25 Singleton_HungerMode s = Singleton_HungerMode.getSingleton(); 26 //通过类名方式访问静态方法,以突破不能在别的类里创建对象的限制. 27 Singleton_HungerMode s1 = Singleton_HungerMode.getSingleton(); 28 29 if(s == s1) { 30 System.out.println("是同一个对象"); 31 } 32 else System.out.println("不是同一个对象"); 33 34 35 36 } 37 }
第二种
1 package com.atguigu.javase; 2 3 /** 4 * @author _aL0n4k 5 * @version 1.0 6 * @time 2015年9月2日 下午6:12:47 7 */ 8 public class Singleton_IdlerMode { //单例模式 - 懒汉式 9 private Singleton_IdlerMode(){}//把构造器设置为私有,以阻止在外部类创建对象 10 private static Singleton_IdlerMode singleton = null; 11 //设置一个引用为空,以便只有让在类内部调用他.因为不能创建对象,所以我们需要用static静态修饰,然后用 12 //类名的方式来访问.在下方写个获取对象引用的方法,要加上static以便在别的类调用这个方法以获取这个对象的引用. 13 //所以这里也要加上static 14 15 //这里写成public是因为要在类外部调用这个方法,获取 对象引用,加上static是因为不能创建对象 让他通过类名的方式去调用它. 16 //因为要返回这个类的引用,所以返回值要写成Singleton 17 public static Singleton_IdlerMode getSingleton() { 18 //如果引用空我们才去创建对象然后返回引用,而且因为是单例我们只能调用一次. 19 //当这个方法被调用后,singleton就不在为空,所以加上个判断.只有当满足这个条件的时候,才在这里给他创建对象的引用 20 if(singleton == null) { 21 singleton = new Singleton_IdlerMode(); 22 } 23 return singleton; 24 } 25 26 } 27 28 //写个测试类测试下,创建的2个对象是不是指向一个地址,如果是则说明是一个对象. 29 class Singleton_IdlerModeTest { 30 public static void main(String[] args) { 31 Singleton_IdlerMode singleton1 = Singleton_IdlerMode.getSingleton(); 32 Singleton_IdlerMode singleton2 = Singleton_IdlerMode.getSingleton(); 33 //这2个引用的地址相等说明是一个对象,那么就符合单例模式 34 if(singleton1 == singleton2) { 35 System.out.println("是一个对象"); 36 }else System.out.println("不是一个对象"); 37 } 38 }
时间: 2024-10-11 07:26:04