[디자인 모드 노트] 단일 모드 싱글 톤 패턴
디 테 일 구현
클래스 의 구조 방법 을 개인 (private) 으로 설정 하고 공유 (Public) 방법 으로 클래스 의 인 스 턴 스 를 가 져 옵 니 다.
코드 예제
public class Singleton {
private static Singleton singleton= null;
public static Singleton getSingleton(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
private Singleton(){
//System.out.println("new singleton");
}
}
위의 이 예 는 높 은 병발 상황 에서 동기 화 문제 가 발생 할 수 있 습 니 다. 만약 에 하나의 스 레 드 가 if 판단 을 완성 하지만 대상 이 완성 되 지 않 았 을 때 다른 스 레 드 도 if 판단 을 하면 메모리 에 여러 개의 인 스 턴 스 가 발생 할 수 있 습 니 다. 스 레 드 안전 을 위해 다음 과 같은 두 가지 방법 을 사용 할 수 있 습 니 다.
첫 번 째 방법 은 직접 예화 류 이다.
public class Singleton {
private static Singleton singleton= new Singleton();
public static Singleton getSingleton(){
return singleton;
}
private Singleton(){
//System.out.println("new singleton");
}
}
두 번 째 방법, if 판단 에 잠 금 추가
public class ConcurrentSingleton {
private static ConcurrentSingleton singleton = null;
private ConcurrentSingleton(){
//System.out.println("new singleton");
}
public static ConcurrentSingleton getSingleton(){
if(singleton==null){
createSingleton();
}
return singleton;
}
private static synchronized void createSingleton() {
if(singleton==null){
singleton = new ConcurrentSingleton();
}
}
}
단일 모델 의 장단 점
장점 은 메모리 에 하나의 인 스 턴 스 만 존재 하고 메모리 비용 과 생 성, 소각 대상 의 성능 손실 을 줄 이 며 자원 에 대한 다양한 점용 을 피하 고 자원 접근 을 최적화 하고 공유 할 수 있다 는 것 이다.
단점 은 확장 이 어렵 다 는 것 이다.
단일 모드 확장
하나의 클래스 가 한 정 된 개수 의 인 스 턴 스 만 생 성 할 수 있다 면 확장 사례 를 통 해 이 루어 질 수 있 습 니 다.
코드 인 스 턴 스
public class MultiInstanceSingleton {
private static int maxInstanceSize = 5;
private int number = 0;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
private static Vector<MultiInstanceSingleton> vec = new Vector<MultiInstanceSingleton>();
private MultiInstanceSingleton(){
}
private MultiInstanceSingleton(int num){
this.number = num;
}
private static synchronized MultiInstanceSingleton createInstance(){
return new MultiInstanceSingleton(vec.size());
}
public static MultiInstanceSingleton getInstance(){
MultiInstanceSingleton instance = null;
if(vec.size()<maxInstanceSize){
instance = createInstance();
vec.add(instance);
}else{
int num = new Random().nextInt(maxInstanceSize);
instance = vec.elementAt(num);
}
return instance;
}
public void doSomething(){
System.out.println(" "+this.number+" ");
}
public static void main(String[] args) {
for(int i=0;i<50;i++){
getInstance().doSomething();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.