싱글턴 패턴이란 무엇인가요?
클래스에 인스턴스가 하나만 있는지 확인하고 이에 대한 전역 액세스 지점을 제공합니다. [DP]
클래스 자체가 유일한 인스턴스를 저장하도록 합니다. 이 클래스는 다른 인스턴스가 생성될 수 없음을 보장하며 이 클래스는 인스턴스에 액세스하는 방법을 제공할 수 있습니다. 【DP】
싱글톤 모드는 언제 필요한가요?
프로그램은 특정 기능을 제어하기 위해 한 가지 방법만 필요하며 두 번째 기능을 생성하는 것은 허용되지 않습니다. 예: 은행에서 사용하는 숫자 인식 기계.
싱글턴 모드를 사용하려면 C++static 키워드의 사용법을 이해해야 합니다. 이 블로그 게시물에서는 static을 간략하게 분석합니다.
테스트 사례:
[code]int main(){ //单例模式初始化两个实例的方法 Singleton *s1 = Singleton::getInstance(); Singleton *s2 = Singleton::getInstance(); if(s1 == s2) std::cout << "Two the objects are the same instance.\n"; else std::cout << "Two the objects are the different instance.\n"; return 0; }
싱글톤 모드 구현:
[code]class Singleton{ private: //将构造函数声明为私有的,从而保证只允许类内使用 Singleton(){} //声明一个类的静态对象(类外初始化) static Singleton *instance; public: //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象 static Singleton* getInstance(){ if(instance != NULL){ instance = new Singleton; } return instance; } }; //类外部初始化静态成员变量(静态成员变量必须被初始化) Singleton* Singleton::instance = NULL;
첨부: 멀티스레드 프로그래밍이라면 잠그고 비어 있는지 두 번 판단해야 합니다.
[code]class Singleton{ private: //将构造函数声明为私有的,从而保证只允许类内使用 Singleton(){} //声明一个类的静态对象(类外初始化) static Singleton *instance; public: //静态成员方法,提供一个访问仅有实例的全局访问点。即提供接口创建对象 static Singleton* getInstance(){ if(instance != NULL){ lock(syncObj){ if(instance != NULL){ instance = new Singleton; }//if }//lock }//if return instance; } }; //类外部初始化静态成员变量(静态成员变量必须被初始化) Singleton* Singleton::instance = NULL;
두 스레드 중 하나만 들어갈 수 있고 다른 스레드는 줄을 서서 기다리도록 잠금이 추가됩니다. 첫 번째 스레드가 들어갔다가 나온 후에 후자가 들어갈 수 있습니다. 두 번째 null 판단은 첫 번째 스레드가 인스턴스를 생성하고 두 번째 스레드가 진입 후 더 이상 인스턴스를 생성하지 않도록 하는 것입니다.
위 내용은 C++ 디자인 패턴의 싱글턴 모드에 대한 간략한 소개 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!