단일 모드 - 지연 초기화

3514 단어
단일 모드 특징: 구조 함수는private로 성명되고 대상은 함수를 통해 호출됩니다.
기본 단일 모드 (굶주린 사람 모드):
final class Singleton{
private static Singleton s=new Singleton(47);
private int i;
private Singleton(int x){i=x;}

public static Singleton getReference(){
return s;
}
public int getValue(){return i;}
public void setValue(int x){i=x;}
}

( ):
final class StaticSingleton{
private static StaticSingleton s;
private int i;
private StaticSingleton(int x){i=x;}

public static StaticSingleton getReference(){
if(s == null){
s=new StaticSingleton(47);
}
return s;
}

public int getValue(){return i;}
public void setValue(int x){i=x;}
}
final class InnerSingleton{
private static InnerSingleton s;
private int i;
private InnerSingleton(int x){i=x;}

private static class SingletonHolder{
static InnerSingleton instance =new InnerSingleton(47);
}
public static InnerSingleton getReference(){
return SingletonHolder.instance;
}

public int getValue(){return i;}
public void setValue(int x){i=x;}
}

public interface EmployeeManagement {
static String name="";
public void setName(String name);
}
final class Employee implements EmployeeManagement{
static String name;
private static Map map = new HashMap();
static{
Employee single = new Employee();
map.put(single.getClass().getName(), single);
}
public void setName(String name){
this.name=name;
}
protected Employee(){}
protected Employee(String name){this.setName(name);}
public static Employee getInstance(String name) {
if(name == null) {
name = Employee.class.getName();
System.out.println("name == null"+"--->name="+name);
}
if(map.get(name) == null) {
if(map.get(name) == null) {
try {
map.put(name, (Employee) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
return map.get(name);
}

public void getInfo(){
System.out.println(name+" is here .");
}
}
public class RegistryService {

public static void main(String[] args) {
Employee em=Employee.getInstance("singleton.Employee");
em.setName("SuYU");
em.getInfo();
}
}

https://share.weiyun.com/5kLvDQS
https://share.weiyun.com/5LRwSxS

전재 대상:https://www.cnblogs.com/ssMellon/p/6414810.html

좋은 웹페이지 즐겨찾기