三. 总结这是一个很简单的模式,以前也学过,所以简单写一个小例子。这个例子有两个单例类,一个是懒汉式单例类一个是饿汉式单例类。两个类都用来模拟打印机,由于打印机一次只能打印一个文件,所以需要使用单例模式。Test.javapublic class Test {public static void main(String[] args) {EagerSingleton eagerSingleton1 = EagerSingleton.getInstance();EagerSingleton eagerSingleton2 = EagerSingleton.getInstance();eagerSingleton2.print("eagerSingleton2");eagerSingleton1.print("eagerSingleton1");LazySingleton lazySingleton1 = LazySingleton.getInstance();LazySingleton lazySingleton2 = LazySingleton.getInstance();lazySingleton1.print("lazySingleton1");lazySingleton2.print("lazySingleton2");}}测试类EagerSingleton.javapublic class EagerSingleton {private static EagerSingleton eagerSingleton = new EagerSingleton();//饿汉式单例即在一开始就将本类初始化,在静态类中调用private EagerSingleton(){}public static EagerSingleton getInstance(){//通过此静态方法返回单例return eagerSingleton;}//打印方法public void print(String name){System.out.println(name);for(int i=0; i<40; i++){System.out.print(i+" ");}}}这个是饿汉式单例。LazySingleton.javapublic class LazySingleton {//饿汉式单例在一开始并不初始化private static LazySingleton lazySingleton;private LazySingleton(){}//由于这里存在线程安全问题,所以要加synchronizedpublic synchronized static LazySingleton getInstance(){//在此方法中先判断是否为空,如果为空则创建新对象,否则直接返回if(lazySingleton == null){lazySingleton = new LazySingleton();}return lazySingleton;}public void print(String name){System.out.println(name);for(int i=0; i<40; i++){System.out.print(i+" ");}}}
简单的单例模式,我已经会用了。
联系客服