工厂办法形式完成单例ITeye - 凯发娱乐

工厂办法形式完成单例ITeye

2019-01-12 04:17:32 | 作者: 辰阳 | 标签: 单例,工厂,办法 | 浏览: 765

首先要创立一个单例实例,这个实例的无参结构是私有的,避免外部运用new关键字创立目标

public class Singleton {
 private Singleton() {
 public void doSomething() {
 System.out.println("单例工厂");
}

 

再次创立一个单例工厂,创立目标要在static代码块中,不可在办法getSingleton()中,如果在该办法中,每次调用都会发生一个新的目标,这就违反了单例的规矩。

public class SingletonFactory {
 private static Singleton singleton;
 static {
 try {
 Class clazz = Class.forName(Singleton.class.getName());
 Constructor constructor = clazz.getDeclaredConstructor();
 constructor.setAccessible(true);
 singleton = (Singleton) constructor.newInstance();
 } catch (ClassNotFoundException e) {
 } catch (NoSuchMethodException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (SecurityException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (InstantiationException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IllegalAccessException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IllegalArgumentException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (InvocationTargetException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 public static Singleton getSingleton() {
 return singleton;
}

 客户端代码:

public class SingletonFactoryTest {
 public static void main(String[] args) {
 Singleton singleton = SingletonFactory.getSingleton();
 Singleton singleton2 = SingletonFactory.getSingleton();
 System.out.println(singleton);
 System.out.println(singleton2);
}

 打印成果:

com.za.java.factory.Singleton@3c0f3387

com.za.java.factory.Singleton@3c0f3387

打印两次的成果相同,阐明运用的是同一个目标。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章