싱글 톤 모드
동기는 때때로 수업의 한 인스턴스 만 있으면 중요합니다. 예를 들어 시스템에는 하나의 창 관리 인스턴스 만 있어야합니다.
싱글 톤 패턴은 가장 간단한 디자인 패턴입니다. 클래스는 스스로 인스턴스화하여 인스턴스가 하나만 있는지 확인 하고이 인스턴스에 액세스 할 수있는 항목을 제공합니다.
목적
1. 하나의 인스턴스 만 생성되었는지 확인하십시오.
2.이 인스턴스에 액세스 할 수있는 항목을 제공합니다.
Final을 사용하여 한 번 생성되고 개인 생성기가 인스턴스화되지 않도록합니다. GetInstance 공개 방법은 외부 액세스가 가능하도록합니다. 다음은 배고픈 모드입니다.
공개 클래스 싱글 톤 {개인 정적 최종 싱글 톤 인스턴스 = 새로운 싱글 톤 (); Private Singleton () {} public static singleton getinstance () {return instance; }}
게으른 모드 :
공개 클래스 싱글 론 데모 {개인 정적 휘발성 싱글 론 데모 인스턴스 = null; private singletondemo () {} public static singletondemo getinstance () {if (instance == null) {synchronized (singletondemo .class) {if (instance == null) {instance = new Singletondemo (); }} return instance; }}
적용 가능한 시나리오 및 예제
1. 로거 클래스는 로그가 인쇄 될 때마다 로거 인스턴스의 생성을 방지합니다.
2. 제어 클래스, 일반적으로 전체 시스템에는 하나의 제어 인스턴스 만 있습니다.
특정 문제 및 구현
1. 스레드-안전, 강력한 싱글 톤 모드는 스레드 안전이어야합니다.
2. 게으른 모드는 이중 잠금 장치를 사용합니다.
3. 독수리 모드는 정적 변수를 사용하며 프로그램이로드 될 때 인스턴스화되어 인스턴스가 하나만 있는지 확인합니다.
4. 초록 공장 및 공장 방법은 일반적으로 공장이 하나만 있는지 확인하기 위해 싱글 톤 패턴으로 설계되었습니다.
5. 직렬화 및 사막화를 사용하면 여러 인스턴스가 생성됩니다. 이를 피하려면 ReadResolve 기능을 사용하지만 직렬화를 사용하지 않는 것이 가장 좋습니다.
공개 클래스 싱글 톤은 직렬화 가능 {... //이 메소드 가이 클래스의 개체가 사막화 된 직후에 호출됩니다. //이 메소드는 싱글 톤 인스턴스를 반환합니다. 보호 된 객체 readResolve () {return getInstance (); }}
핵심 요점
1. 다중 스레드 프로그램에서는 데이터 동기화에주의를 기울이십시오.
2. 직렬화 할 때 readResolve 메소드를 사용하여 인스턴스를 반환하여 여러 객체가 생성되지 않도록하십시오.
3. 여러 클래스 로더로로드되면 여러 인스턴스가 생성됩니다.
간단한 공장 모드
동기 부여의 단순한 공장 모델은 추상 공장 및 공장 방법의 기초 및 예비 구현입니다.
목적
1. 객체 인스턴스화의 세부 사항을 클라이언트에 공개하지 마십시오.
2. 공통 인터페이스를 통해 객체를 만듭니다.
성취하다
구현은 매우 간단합니다.
1. 클라이언트가 제품을 필요로하는 경우 새로운 제품을 사용하여 제품을 작성하지 않지만 공장에 제품 설명을 제공하여 공장이 새로운 제품을 제공 할 수 있습니다.
2. 공장은 제품을 클라이언트에게 인스턴스화합니다.
3. 클라이언트는 제품의 콘크리트 구현에 관심을 갖지 않고 추상 제품을 사용합니다.
예
1. 도면 모양을 그리는 프로그램. 모양은 제품 인터페이스이고 삼각형은 콘크리트 제품입니다. 공장을 만들고 고객의 설명에 따라 제품을 만들 수 있습니다. 그러나 새로운 모양을 추가 할 때는 공장 클래스를 수정해야합니다.
특정 문제 및 구현
1. 신제품을 추가 할 때 공장을 수정해야합니다.
공개 클래스 제품 factory {public product createProduct (String productId) {if (id == id1) return new oneproduct (); if (id == id2) 새로운 다른 제품 ()을 반환합니다 (); ... // 다른 ID는 널 리턴 null; // ID에 예상 값이없는 경우} ...}일반적으로 우리는 IF 문을 사용하여 제품 설명을 판단하고 다른 제품을 인스턴스화합니다. 새로운 제품이 있으면 새로운 판단을 추가해야합니다. 이 문제는 추상 공장 패턴으로 해결할 수 있습니다.
요약
1. 공장 모드가 실제로 필요할 때만 사용하십시오. 그렇지 않으면 프로그램의 복잡성을 증가시킵니다. 예를 들어, 여러 객체에 유사한 기본 유형이있는 경우 간단한 공장 모드를 사용하여 객체를 균일하게 생성하는 것을 고려할 수 있습니다.
2. 간단한 공장에는 더 많은 판단 지점 진술이있어 수정의 개방 및 폐쇄 원리를 위반합니다. 따라서 일부 고정되고 간단한 프로그램에 간단한 공장 모드를 사용하고 복잡하고 자주 확장되는 프로그램에 초록 공장 모드 또는 공장 방법 모드를 사용하는 것이 좋습니다.