单例模式:
Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。
单例模式代码:
package com.mode.test.single2;/** * @author 经得起考验不 * 单例模式:只提供一个实例 * 该代码在多线程的情形下未测试 */public class Singleton { /** * 私有的构造方法 * 为什么是私有的? * 如果我们提供公共的构造方法或不提供构造方法使用默认的无参数构造方法时 * 当其他程序中实例化Singleton这个类的时候,可以产生多个实例,就不符合了单例模式的要求 * 所以将构造方法修饰为私有的 */ PRivate Singleton(){ }; /** * 代码42行报错如下: * Cannot make a static reference to the non-static field singleton * 根据静态方法使用成员变量时只能够使用静态变量,所以我们把该变量修饰为静态变量 */ private static Singleton singleton=new Singleton(); /** * 不能通过构造方法完成单例模式,还有一种方式 * 通过静态方法(Static Method) 来获取单实例 * 为什么是静态方法?而不是普通方法呢? * 构造方法已经被关键字Private修饰为私有的方法, * 不能通过构造方法构造对象了,那我们就不能通过对象名.方法名的方式来调用普通方法了 * 因为静态方法可以使用类名.方法名的方法调用,所以我们使用静态的方法来构造单个实例 */ public static Singleton getSingletonInstance(){ /** * 如果使用new Singleton() * 多次调用就会return多个实例对象 * 就不符合单例模式的要求了 * 所以不能使用该方法 */ return new Singleton(); } /** * 正确的单实例方法 * @return 静态的对象引用(单实例) */ public static Singleton getSingletonInstacces(){ return singleton; } }测试类代码:
package com.mode.test.single2;public class SingletonTest { /** * @param args * 通过比较对象的引用地址来确定,是不是同一个实例 * * 第一个输出语句校验结果为false,不是一个实例 * 第二个输出语句校验结果为true,是一个实例 */ public static void main(String[] args) { Singleton ss=Singleton.getSingletonInstance(); Singleton ss2=Singleton.getSingletonInstance(); System.out.println(ss==ss2); Singleton s=Singleton.getSingletonInstacces(); Singleton s2=Singleton.getSingletonInstacces(); System.out.println(s==s2); }}单例模式大致就是这样,适合初学者,如果有错的地方或不足的地方请补充!!!
新闻热点
疑难解答