이 기사는 참조를 위해 Java Design Pattern의 싱글 톤 패턴의 특정 코드를 공유합니다. 특정 내용은 다음과 같습니다
개념:
싱글 톤 패턴 : 클래스에는 인스턴스가 하나뿐입니다.
클래스는 하나의 인스턴스 만 가지고 있으며 글로벌 액세스 포인트를 제공합니다.
이 모드 사용 원인 :
웹 사이트를 탐색 할 때 일부 웹 사이트에는 "현재 온라인 수의 사람들"이 표시됩니다. 일반적 으로이 기능을 구현하는 방법은 각 로그인 된 IP로 메모리, 파일 또는 데이터베이스에 저장하는 것이며 각각의 추가 IP는 "+1"으로 달성됩니다. 일반적으로 "+1"의 기능을 실현하는 것은 add ()와 같은 방법입니다. 예를 들어, "업데이트"문을 사용하여 먼저 데이터베이스에 저장된 데이터를 얻은 다음 +1을 얻은 다음 데이터베이스의 데이터를 업데이트 한 다음 저장하십시오. 페이지에 표시되면 다른 방법을 통해 데이터베이스에서 데이터를 얻을 수 있습니다. 그러나 여러 사용자가 동시에 로그인하면 각각의 사용자가 새 개체를 새롭게 해야하는 경우 "Object. 메소드 이름"호출을 통해 add () 메소드를 실행 한 다음 데이터베이스에 데이터를 저장하면 여러 사용자가 실제 사용자 데이터를 데이터베이스에 정확하게 기록 할 수 없습니다. 따라서이 카운터를 글로벌 객체로 설계하는 (모두는 하나, 새 개체 대신이 객체를 사용하고) 동일한 데이터를 공유하면 비슷한 문제를 피할 수 있습니다. 이것은 우리가 부르는 싱글 톤 패턴의 응용 중 하나입니다.
마찬가지로 다른 시나리오에서는 유사한 시나리오가 발생하고 유사한 아이디어가 사용됩니다. 예를 들어:
1. 외부 리소스 : 각 컴퓨터에는 여러 프린터가 있지만 한 명의 프린터 풀러 만 사용하여 두 개의 인쇄 작업이 프린터에 출력되는 것을 피할 수 있습니다. 내부 리소스 : 대부분의 소프트웨어에는 시스템 구성을 저장할 하나 이상의 속성 파일이 있습니다. 이러한 시스템에는 이러한 속성 파일을 관리 할 객체가 있어야합니다. 2. Windows 'Task Manager (작업 관리자)는 일반적인 싱글 톤 모드입니다 (이것은 매우 친숙합니다). 그것에 대해 생각하면 두 개의 Windows 작업 관리자를 열 수 있습니까? 당신이 그것을 믿지 않는다면, 직접 시도해보십시오 ~
3. Windows 용 Recycle Bin도 일반적인 싱글 톤 응용 프로그램입니다. 전체 시스템 작업 중에 재활용 빈은 하나의 인스턴스 만 유지했습니다.
4. 웹 사이트의 카운터는 일반적으로 싱글 톤 모드에서 구현되며, 그렇지 않으면 동기화하기가 어렵습니다.
5. 싱글 톤 모드에서 응용 프로그램 로그 애플리케이션을 어떻게 구현할 수 있습니까? 일반적으로 공유 로그 파일이 항상 열려 있기 때문입니다. 작동 할 인스턴스가 하나만있을 수 있기 때문입니다. 그렇지 않으면 컨텐츠를 추가하기가 어렵습니다.
6. 싱글 톤 모드는 일반적으로 구성 파일이 공유 리소스이기 때문에 웹 응용 프로그램에서 구성 객체를 읽는 데 사용됩니다.
7. 데이터베이스 연결 풀의 설계는 일반적으로 데이터베이스 연결이 데이터베이스 리소스이기 때문에 싱글 톤 모드를 채택합니다. 데이터베이스 소프트웨어 시스템에서 데이터베이스 연결 풀을 사용하면 주로 데이터베이스 연결을 열거 나 닫음으로써 발생하는 효율성 손실이 절약됩니다. 싱글 톤 모드 가이 손실을 크게 줄일 수 있기 때문에이 효율 손실은 여전히 매우 비쌉니다.
8. 다중 스레드 스레드 풀의 설계는 일반적으로 싱글 톤 모드를 채택합니다. 스레드 풀은 풀에서 스레드를 제어 할 수 있어야하기 때문입니다.
9. 운영 체제의 파일 시스템은 또한 대형 싱글 톤 모드의 구현의 구체적인 예입니다. 운영 체제에는 하나의 파일 시스템 만 가질 수 있습니다.
10. httPapplication은 또한 단위 예제의 전형적인 적용입니다. ASP.NET (IIS)의 전체 요청 수명주기에 익숙한 사람이라면 HTTPapplication도 싱글 톤 패턴이며 모든 HTTPModules는 HTTPapplication 인스턴스를 공유한다는 것을 알아야합니다.
요약하면, 싱글 톤 모드의 일반적인 응용 시나리오는 다음과 같습니다.
1. 자주 인스턴스화 해야하는 물체를 자주 파괴해야합니다.
2. 객체를 만들 때 너무 많은 시간이 걸리거나 자원이 너무 많이 걸리지 만 종종 사용됩니다.
3. 상태의 공구와 같은 물체.
4. 데이터베이스 또는 파일 개체에 대한 빈번한 액세스.
5. 자원 공유의 경우 자원 운영으로 인한 성능 또는 손실을 피하십시오. 위의 로그 파일, 응용 프로그램 구성 등과 같은.
6. 자원을 통제 할 때 자원 간의 상호 의사 소통을 용이하게합니다. 스레드 풀 등과 같은
특징:
1. 싱글 톤 클래스에는 하나의 인스턴스 만있을 수 있습니다.
2. 싱글 톤 클래스는 고유 한 인스턴스를 만들어야합니다.
3. 싱글 톤 클래스는이 인스턴스를 다른 모든 객체에 제공해야합니다.
싱글 톤 패턴 요소 :
1. 개인 건설 방법
2. 개인 정적 참조는 자신의 인스턴스를 가리 킵니다
3. 리턴 값으로 자체 인스턴스를 가진 공개 정적 메소드
싱글 톤 패턴을 구현하는 세 가지 방법이 있습니다.
1. 배고픈 스타일 : 싱글 톤 인스턴스는 클래스 로딩시 구축되며 시급하게 초기화됩니다. (예압 방법)
/*** 배고픈 남자 스타일 (권장) **/public class test {private test () {} 공개 정적 테스트 인스턴스 = new test (); 공개 테스트 getInstance () {return instance; }} 이점
1. 스레드 안전
2. 클래스가로드되는 동안 정적 객체가 생성되었으며 호출 할 때 응답 속도가 빠릅니다.
결점
자원 효율성이 높지 않으며 GetInstance ()가 실행되지 않을 수 있지만 클래스의 다른 정적 메소드가 실행되거나 클래스 (클래스 .forname)가로드되면이 인스턴스가 여전히 초기화됩니다.
2. 게으른 스타일 : 싱글 톤 인스턴스는 처음으로 사용될 때 구축되며 초기화됩니다.
클래스 테스트 {private test () {} 공개 정적 테스트 인스턴스 = null; public static test getInstance () {if (instance == null) {// 여러 스레드가 인스턴스가 null이라고 판단하면 새 작업을 수행 할 때 여러 스레드가 복제됩니다. } return 인스턴스; }} 이점
배고픈 남자의 형태로 사용하지 않고 사례를 만들지 마십시오. 자원 활용률이 높습니다. GetInstance ()를 실행하지 않으면 실행되지 않습니다. 이 클래스의 다른 정적 방법을 실행할 수 있습니다.
결점
단일 스레드에서 게으른 스타일에는 문제가 없지만 동료가 여러 스레드에 액세스 할 때 여러 인스턴스를 생성 할 수 있으며 이러한 여러 인스턴스가 동일한 객체가 아닙니다. 나중에 생성 된 인스턴스는 먼저 생성 된 인스턴스를 덮어 쓸 것이지만, 다른 객체가 얻어지는 경우가 여전히 남아 있습니다. 이 문제에 대한 해결책은 처음으로 로딩 할 때 충분히 빠르지 않으며 멀티 스레딩의 불필요한 동기화 오버 헤드가 높습니다.
3. 이중 감지
클래스 테스트 {private test () {} 공개 정적 테스트 인스턴스 = null; public static test getInstance () {if (instance == null) {synchronized (test.class) {if (instance == null) {instance = new test (); }} return instance; }} 이점
자원 활용률이 높습니다. GetInstance ()를 실행하지 않으면 실행되지 않습니다. 이 클래스의 다른 정적 방법을 실행할 수 있습니다.
결점
처음으로로드 할 때 응답이 빠르지 않았으며 Java 메모리 모델의 몇 가지 이유로 인해 때때로 실패했습니다.
4. 정적 내부 클래스
클래스 테스트 {private test () {} private static class singletonHelp {static test instance = new test (); } public static test getInstance () {return singletonHelp.instance; }} 이점
자원 활용률은 높으며 인스턴스를 얻지 않고 실행되지 않습니다. 이 클래스의 다른 정적 방법을 실행할 수 있습니다.
결점
처음 로딩 할 때 충분히 빠르지 않습니다
요약 :
일반적으로 배고픈 스타일이 사용됩니다. 자원에 대해 매우 신경 쓰면 정적 내부 유형을 사용할 수 있습니다. 게으른 스타일과 이중 감지를 사용하는 것이 좋습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.