单例模式(Singleton) 这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。 单例模式要求保证唯一,那么怎么样才能保证唯一性呢?对了,这就是静态变量。单例模式有以下两种形式: 第一种形式: package reflect; public classSingleton { /* * 注意这是private私有的构造方法, 只供内部调用 * 外部不能通过new的方式来生成该类的实例 */ privateSingleton() { } /* * 在自己内部定义自己一个实例,是不是很奇怪? * 定义一个静态的实例,保证其唯一性 */ private staticSingleton instance = newSingleton(); // 这里提供了一个供外部访问本class的静态方法,可以直接访问 public staticSingleton getInstance() { return instance; } } /** *测试单例模式 */ class SingRun{ public static voidmain(String[] args){ //这样的调用不被允许,因为构造方法是私有的。 //Singletonx=new Singleton(); //得到一个Singleton类实例 Singletonx=Singleton.getInstance(); //得到另一个Singleton类实例 Singletony=Singleton.getInstance(); //比较x和y的地址,结果为true。说明两次获得的是同一个对象 System.out.println(x==y); } } 第二种形式: public classSingleton { //先申明该类静态对象 private staticSingleton instance = null; //创建一个静态访问器,获得该类实例。加上同步,表示防止两个线程同时进行对象的创建 public static synchronizedSingleton getInstance() { //如果为空,则生成一个该类实例 if (instance == null){ instance = newSingleton(); } return instance; } } |