디자인 모델 의 단일 예 모드 (Singleton) 발췌

5896 단어
23 가지 GOF 디자인 모델 은 보통 세 가지 로 나 뉘 는데 그것 이 바로 창설 형 모델, 구조 형 모델, 행위 모델 이다.
창설 형 모드 는 1. Factory Method (공장 방법 모드) 를 포함한다.2. 추상 공장 (추상 공장 모델);3. Singleton (단일 모드);4. Builder (건축 자 모드);5. Prototype (원형 모드).
구조 형 모델 은 6. Bridge (브리지 모델) 를 포함한다.7. 어댑터 (어댑터 모드);8. 장식 (장식 모드);9. Composite (조합 모드);10. Flyweight (향원 모드);11. Facade (외관 모델);12. 프 록 시 (프 록 시 모드).
행위 모드 는 13. TemplateMethod (템 플 릿 방법 모드) 를 포함한다.14. Strategy (전략 모델);15. 상태 (상태 모드);16. Observer (관찰자 모드);17. Memento (비망록 모드);18. Mediator (중개자 모드);19. command (명령 모드);20. Visitor (방문 자 모드);21. 책임 체인 (책임 체인 모델);22. Iterator (교체 기 모드);23. Interpreter (해석 기 모드).
Factory Method: 대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.Factory Method 는 클래스 의 실례 화 를 하위 클래스 로 지연 시 킵 니 다.
Abstract Factory: 일련의 관련 되 거나 서로 의존 하 는 대상 을 만 드 는 인 터 페 이 스 를 제공 합 니 다. 구체 적 인 종 류 를 지정 하지 않 아 도 됩 니 다.
Singleton: 하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 합 니 다.
Builder: 복잡 한 대상 의 구축 을 표시 와 분리 시 켜 같은 구축 과정 에서 서로 다른 표 시 를 만 들 수 있 습 니 다.
Prototype: 생 성 대상 의 종 류 를 프로 토 타 입 인 스 턴 스 로 지정 하고 이 프로 토 타 입 을 복사 하여 새로운 대상 을 만 듭 니 다.
Bridge: 추상 적 인 부분 과 그 실현 부분 을 분리 하여 독립 적 으로 변화 시 킬 수 있 습 니 다.
Adapter: 하나의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 로 변환 합 니 다.Adapter 모드 는 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 던 클래스 들 을 함께 일 할 수 있 게 합 니 다.
Decorator: 대상 에 게 동적 으로 추가 적 인 직책 을 추가 합 니 다.확장 기능 의 경우 Decorator 모드 는 하위 클래스 생 성 방식 보다 유연 합 니 다.
Composite: 대상 을 트 리 구조 로 조합 하여 '부분 - 전체' 의 차원 구 조 를 나타 낸다.Composite 는 고객 이 단일 대상 과 복합 대상 에 대한 사용 을 일치 시 킵 니 다.
Flyweight: 공유 기술 을 활용 하여 대량의 입자 도 를 효과적으로 지원 하 는 대상.
Facade: 서브 시스템 의 인터페이스 에 일치 하 는 인 터 페 이 스 를 제공 합 니 다. Facade 모델 은 고 층 인 터 페 이 스 를 정 의 했 습 니 다. 이 인 터 페 이 스 는 이 서브 시스템 을 더욱 쉽게 사용 할 수 있 습 니 다.
Proxy: 이 대상 에 대한 접근 을 제어 하기 위해 다른 대상 에 게 에이 전 트 를 제공 합 니 다.
Template Method: 작업 중인 알고리즘 의 골격 을 정의 하고 일부 절 차 를 하위 클래스 로 지연 합 니 다.Template Method 는 하위 클래스 가 하나의 알고리즘 구 조 를 바 꾸 지 않 고 이 알고리즘 의 특정한 절 차 를 다시 정의 할 수 있 도록 합 니 다.
Strategy: 일련의 알고리즘 을 정의 하여 하나씩 포장 하고 서로 바 꿀 수 있 도록 합 니 다.이 모델 은 알고리즘 의 변 화 를 사용 하 는 고객 에 게 독립 시 킬 수 있 습 니 다.
State: 대상 이 내부 상태 가 바 뀔 때 행동 을 바 꿀 수 있 도록 합 니 다.대상 이 자신 이 속 한 종 류 를 수정 한 것 처럼 보인다.
Observer: 대상 간 의 다 중 의존 관 계 를 정의 합 니 다. 도시락 대상 의 상태 가 바 뀌 었 을 때 모든 의존 대상 이 알림 을 받 고 자동 으로 새로 고침 됩 니 다.
Memento: 패 키 징 성 을 파괴 하지 않 는 전제 에서 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 합 니 다.이렇게 하면 이 대상 을 저 장 된 상태 로 복원 할 수 있다.
Mediator: 일련의 대상 의 상호작용 을 중개 대상 으로 밀봉 합 니 다.중개 자 는 각 대상 이 명시 적 으로 서로 인용 하지 않 아 도 되 고 결합 을 느슨 하 게 하 며 독립 적 으로 그들의 상호작용 을 바 꿀 수 있다.
command: 하나의 요청 을 대상 으로 밀봉 하여 서로 다른 요청 으로 고객 을 매개 변수 화 할 수 있 습 니 다.요청 대기 열 이나 요청 로 그 를 기록 하고 취소 가능 한 동작 을 지원 합 니 다.
Visitor: 특정한 대상 구조 에 작용 하 는 각 요소 의 조작 을 나타 낸다.그것 은 각 요소 의 종 류 를 바 꾸 지 않 는 전제 에서 이러한 요소 에 작용 하 는 새로운 조작 을 정의 할 수 있 게 한다.
Chain of Responsibility: 요청 한 발송 자 와 수신 자 간 의 결합 을 해제 하기 위해 여러 대상 이 이 요청 을 처리 할 수 있 도록 합 니 다.이 대상 들 을 하나의 체인 으로 연결 하고 이 체인 을 따라 이 요 구 를 전달 하 며 한 대상 이 처리 할 때 까지 합 니 다.
Iterator: 취 합 대상 의 각 요 소 를 순서대로 방문 하 는 방법 을 제공 하고 이 대상 의 내부 표 시 를 노출 하지 않 아 도 됩 니 다.
Interpreter: 언어 를 지정 하여 문법 을 정의 하고 해석 기 를 정의 합 니 다. 이 해석 기 는 이 표현 을 사용 하여 언어 중의 문장 을 설명 합 니 다.
 
         Singleton: (1), 의도: 하나의 인 스 턴 스 만 있 고 전체 방문 점 을 제공 합 니 다.(2) 적용 성: 클래스 가 하나의 인 스 턴 스 만 있 고 고객 이 모두 가 알 고 있 는 방문 점 에서 방문 할 수 있 을 때;이 유일한 인 스 턴 스 는 하위 클래스 를 통 해 확장 할 수 있 고 고객 이 코드 를 변경 하지 않 아 도 확장 인 스 턴 스 를 사용 할 수 있 을 때;(3) 장점: A. 유일한 인 스 턴 스 에 대한 제어 접근: Singleton 류 가 유일한 인 스 턴 스 를 패키지 하기 때문에 고객 이 어떻게, 언제 방문 하 는 지 엄 격 히 통제 할 수 있 습 니 다.B. 이름 공간 축소: Singleton 모드 는 전체 변수 에 대한 개선 으로 유일한 인 스 턴 스 를 저장 하 는 전체 변수 가 이름 공간 을 오염 시 키 는 것 을 피 할 수 있 습 니 다.C. 조작 과 표시 에 대한 정 화 를 허용 합 니 다. Singleton 류 는 하위 클래스 가 있 을 수 있 고 이 확장 클래스 의 인 스 턴 스 로 응용 프로그램 을 설정 하 는 것 은 쉬 운 일 입 니 다. 필요 한 클래스 의 인 스 턴 스 로 실행 시간 에 응용 프로그램 을 설정 할 수 있 습 니 다.D. 가 변 수 를 허용 하 는 인 스 턴 스: 이 모델 은 당신 의 생각 을 쉽게 바 꾸 고 Singleton 류 의 여러 인 스 턴 스 를 허용 합 니 다.또한, 사용 하 는 인 스 턴 스 의 수 를 같은 방법 으로 제어 할 수 있 습 니 다.Singleton 인 스 턴 스 에 접근 할 수 있 는 동작 만 변경 해 야 합 니 다.E. 클래스 작업 보다 유연 합 니 다. 다른 싱글 톤 기능 을 패키지 하 는 방식 은 클래스 작업 (즉, C + + 의 정적 구성원 함수 나 Smalltalk 의 클래스 방법) 을 사용 하 는 것 입 니 다.그러나 이 두 가지 언어 기술 은 하나의 사례 가 여러 개 있 도록 디자인 을 바 꾸 기 어렵다.그 밖 에 C + + 의 정적 구성원 함 수 는 가상 함수 가 아니 기 때문에 하위 클래스 는 다 중 으로 정의 할 수 없습니다.
예제 코드 1:
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Singleton
{
private:
	Singleton() {}
	static Singleton* single;

public:
	static Singleton* GetInstance()
	{
		if (single == NULL) {
			single = new Singleton();
		}

		return single;
	}
};

Singleton* Singleton::single = NULL;//         

//   
int main()
{
	Singleton* s1 = Singleton::GetInstance();
	Singleton* s2 = Singleton::GetInstance();

	if (s1 == s2) 
		cout<<"ok"<<endl;
	else
		cout<<"no"<<endl;

	/*result:
		ok
	*/

	return 0;
}

예제 코드 2:
Singleton.h:
#ifndef _SINGLETON_H_
#define _SINGLETON_H_

#include <iostream>
using namespace std;

class Singleton
{
public:
	static Singleton* Instance();
protected:
	Singleton();//Singleton       ,           protected       private
private:
	static Singleton* _instance;
};

#endif//~_SINGLETON_H_

Singleton.cpp:
#include "Singleton.h"

#include <iostream>
using namespace std;

Singleton* Singleton::_instance = 0;

Singleton::Singleton()
{
	cout<<"Singleton ..."<<endl;
}

Singleton* Singleton::Instance()
{
	if (_instance == 0) 
		_instance = new Singleton();

	return _instance;
}

main.cpp:
#include "Singleton.h"

#include <iostream>
using namespace std;

int main()
{
	Singleton* sgn = Singleton::Instance();

	/*result:
		Singleton ...
	*/

	return 0;
}

단일 모드 구성 도:
참고 문헌:
1. < 뻥 튀기 디자인 모델 C + + >
2. 는
3. 는 대상 소프트웨어 를 재 활용 할 수 있 는 기초 이다.

좋은 웹페이지 즐겨찾기