단일 모드 1, 2, 3.
맞습니까?옳고 그름은 기준에 달려 있다
단일 모드 (Singleton Pattern): 특정 클래스에 하나의 인스턴스만 있어야 하며 이를 전체 시스템에 직접 인스턴스화하여 제공합니다.
이 클래스는 단일 클래스라고 하는데, 전역 접근 방법을 제공합니다.단례 모드는 대상 창설 모드의 일종이다.
보아하니 내가 이전에 정의한 것이 전부 옳지 않은 것 같다.
첫 번째 보증류는 단지 하나의 실례일 뿐이다
두 번째 종류 자체는 스스로 실례화한다.
셋째, 전역 접근을 제공하는 방법
OK. 그러면 제가 이제 첫 번째 싱레톤을 써볼게요.
첫 번째 싱레톤. public class Singleton{
private static Singleton sl;
private Singleton(){
System.out.println(" ");
}
public static Singleton getInstance(){
if(sl==null)
sl=new Singleton();
return sl;
}
public static void main(String[] args){
Singleton sl=Singleton.getInstance();
Singleton sl2=Singleton.getInstance();
}
}
실행 결과 초기화 표시
그러나 여기에 문제가 하나 있습니다. 만약 여러 개의 라인이 이 코드를 동시에 실행한다면, 첫 번째 라인이sl=new Singleton () 으로 실행되었을 때 (이 문장은 아직 실행되지 않았습니다), 두 번째 라인이sl이null인지 확인하면 두 번째 라인도 들어옵니다.그리고 여러 상대가 생겼어요.
그래서
두 번째 싱레톤. /***
*
*/
public class Singleton2{
private final static Singleton2 sl2=new Singleton2();
private Singleton2(){
System.out.println(" ");
}
public static Singleton2 getInstance(){
return sl2;
}
public static void main(String[] args){
Singleton2 sl2=Singleton2.getInstance();
Singleton2 sl3=Singleton2.getInstance();
}
}
이런 단일 모드는 우리가 클래스를 불러올 때 클래스 변수를 new로 나온다.이런 방식을 우리는 굶주린 사람 모델이라고 부른다.
우선 굶주린 사람 문제가 위의 라인 문제를 해결했다.내가 처음 불러올 때 클래스 변수가 생겼고 하나밖에 없어서 당연히 라인 문제가 존재하지 않을 것이다.
그러나 여기에 성능 문제가 하나 있다. 내가 이 단일 클래스를 사용하든 안 사용하든 메모리에 항상 불러오기 때문에 성능이 문제다.
위에서 말한 이 모델을 굶주린 사람 모델이라고 하는데 당연히 비굶주린 사람 모델이 있다.하지만 여기서 나는 여러분과 게으름뱅이 모드를 이야기하고 싶지 않다. 너무 복잡하고 별로 쓰지 않는다.
첫 번째 라인 문제를 해결하고 성능을 유지할 수 있는 단례가 있습니까? (사실 두 번째 굶주린 사람 모드는 괜찮습니다. 그 종류만으로도 성능을 얼마나 끌 수 있습니까? 10개가 있어도 100개는 많지 않습니다.)그리고 내가 말한 그 게으름뱅이 모드처럼 복잡하지도 않은데?
답은 긍정적이다.있다!
내부 클래스 모드 public class Singleton3{
private static class hold{
private final static Singleton3 sl3=new Singleton3();
}
private Singleton3(){
System.out.println(" ");
}
public static Singleton3 getInstance(){
return hold.sl3;
}
public static void main(String[] args){
Singleton3 sl3=Singleton3.getInstance();
Singleton3 sl4=Singleton3.getInstance();
System.out.println(sl3==sl4);
}
}
내부류와static,final에 대한 분석은 여기서 잠시 언급하지 않겠습니다.
내부류의 방식은 위에서 제기한 몇 가지 문제를 해결했다.
그런데 문제가 되지 않는 문제를 하나 끄집어냈어요.
내부 클래스는 자바에서 지원하지만 다른 언어에서는 반드시 그렇지는 않습니다.
참고 자료 http://blog.csdn.net/lovelion/article/details/7420883
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 디자인 모델의 단례 모델
소프트웨어 개발 과정에서 우리는 라인 탱크(threadpool), 캐시(cache), 대화상자, 선호 설정 등 하나만 필요로 하는 대상이 종종 있다.이러한 대상이 여러 개의 실례를 만들면 프로그램 행위 이상, 자원 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public class Singleton{
private static Singleton sl;
private Singleton(){
System.out.println(" ");
}
public static Singleton getInstance(){
if(sl==null)
sl=new Singleton();
return sl;
}
public static void main(String[] args){
Singleton sl=Singleton.getInstance();
Singleton sl2=Singleton.getInstance();
}
}
/***
*
*/
public class Singleton2{
private final static Singleton2 sl2=new Singleton2();
private Singleton2(){
System.out.println(" ");
}
public static Singleton2 getInstance(){
return sl2;
}
public static void main(String[] args){
Singleton2 sl2=Singleton2.getInstance();
Singleton2 sl3=Singleton2.getInstance();
}
}
이런 단일 모드는 우리가 클래스를 불러올 때 클래스 변수를 new로 나온다.이런 방식을 우리는 굶주린 사람 모델이라고 부른다.우선 굶주린 사람 문제가 위의 라인 문제를 해결했다.내가 처음 불러올 때 클래스 변수가 생겼고 하나밖에 없어서 당연히 라인 문제가 존재하지 않을 것이다.
그러나 여기에 성능 문제가 하나 있다. 내가 이 단일 클래스를 사용하든 안 사용하든 메모리에 항상 불러오기 때문에 성능이 문제다.
위에서 말한 이 모델을 굶주린 사람 모델이라고 하는데 당연히 비굶주린 사람 모델이 있다.하지만 여기서 나는 여러분과 게으름뱅이 모드를 이야기하고 싶지 않다. 너무 복잡하고 별로 쓰지 않는다.
첫 번째 라인 문제를 해결하고 성능을 유지할 수 있는 단례가 있습니까? (사실 두 번째 굶주린 사람 모드는 괜찮습니다. 그 종류만으로도 성능을 얼마나 끌 수 있습니까? 10개가 있어도 100개는 많지 않습니다.)그리고 내가 말한 그 게으름뱅이 모드처럼 복잡하지도 않은데?
답은 긍정적이다.있다!
내부 클래스 모드 public class Singleton3{
private static class hold{
private final static Singleton3 sl3=new Singleton3();
}
private Singleton3(){
System.out.println(" ");
}
public static Singleton3 getInstance(){
return hold.sl3;
}
public static void main(String[] args){
Singleton3 sl3=Singleton3.getInstance();
Singleton3 sl4=Singleton3.getInstance();
System.out.println(sl3==sl4);
}
}
내부류와static,final에 대한 분석은 여기서 잠시 언급하지 않겠습니다.
내부류의 방식은 위에서 제기한 몇 가지 문제를 해결했다.
그런데 문제가 되지 않는 문제를 하나 끄집어냈어요.
내부 클래스는 자바에서 지원하지만 다른 언어에서는 반드시 그렇지는 않습니다.
참고 자료 http://blog.csdn.net/lovelion/article/details/7420883
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 디자인 모델의 단례 모델
소프트웨어 개발 과정에서 우리는 라인 탱크(threadpool), 캐시(cache), 대화상자, 선호 설정 등 하나만 필요로 하는 대상이 종종 있다.이러한 대상이 여러 개의 실례를 만들면 프로그램 행위 이상, 자원 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
public class Singleton3{
private static class hold{
private final static Singleton3 sl3=new Singleton3();
}
private Singleton3(){
System.out.println(" ");
}
public static Singleton3 getInstance(){
return hold.sl3;
}
public static void main(String[] args){
Singleton3 sl3=Singleton3.getInstance();
Singleton3 sl4=Singleton3.getInstance();
System.out.println(sl3==sl4);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 디자인 모델의 단례 모델소프트웨어 개발 과정에서 우리는 라인 탱크(threadpool), 캐시(cache), 대화상자, 선호 설정 등 하나만 필요로 하는 대상이 종종 있다.이러한 대상이 여러 개의 실례를 만들면 프로그램 행위 이상, 자원 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.