Table of Contents
창조적인 디자인 패턴에 대한 소개
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
단 하나톤 패턴
Singleton 패턴은 단일 인스턴스에 클래스를 제한하고 그 인스턴스에 대한 글로벌 액세스 포인트를 제공합니다. 그것은 가장 간단한 패턴 중 하나이며, 테스트 가능성 및 커플 링에 영향을 미치는 가장 논쟁 중 하나입니다.
핵심 특성
- Single 인스턴스 보장: 개인 생성자는 외부의 순간을 방지합니다. 정적 방법(often )은 단독 인스턴스를 반환합니다.
- Global Access: 이 인스턴스는 애플리케이션 내에서도 접근할 수 있으며, 일반 변수나 방법을 통해 종종 접근할 수 있습니다.
- Lazy 또는 eager 초기화: 인스턴스는 클래스 로딩 시간(eager) 또는 첫 번째 요청(lazy)까지 deferred로 생성될 수 있습니다.
Singleton이 적절하다면
- ]조정해야 하는 자원: 구성 관리자, 스레드 풀, 연결 풀, 로깅 서비스, 하드웨어 인터페이스 드라이버는 종종 정확히 하나의 컨트롤러가 필요합니다.
- 글로벌 상태는 중복되지 않습니다: Cache managers, 파일 시스템 요약 레이어, 또는 GUI 프레임 워크의 창 관리자.
- Resource-intensive object:] 시스템의 이점을 단일 인스턴스에서 생성하고 재사용하는 값이 비싼 객체.
계획
스레드 안전은 가장 일반적인 pitfall입니다. 을 확인하는 네이티브 구현을 통해 인스턴스를 다루는 환경에서 여러 인스턴스를 생성할 수 있습니다. 솔루션에는 , 정적 내부 클래스 (Bill Pugh Singleton) 또는 Java의 enum 기반 싱글턴이 있는 더블 체크 잠금이 포함되어 있습니다. Python에서, thread-safe 초기화가 을 사용하여 표준입니다. 정상적인 선택은 bloating에 따라 생성되고 생성되는 것이 매우 어렵다는 것을 보장하는 것입니다.
Criticism 및 Pitfalls의 특징
단일톤은 종종 글로벌 상태를 도입하기 때문에 항 ‐ patterns로 간주됩니다. 이는 단일톤의 콘크리트 클래스에 직접 연결됩니다. 또한, 분산된 단일톤을 공유하기 위해 의존성을 제거하기 위해 단일톤을 사용하는 것이 좋습니다. 예를 들어, 테스트에서 모방한 클래스는 단일톤의 콘크리트 클래스에 직접 연결됩니다. 현대 연습은 단일톤을 공유한 인스턴스로 공급하기 위해 의존성 주입을 사용하여 단일톤을 공급하는 것이 좋습니다. 또한, 단일톤은 분산 시스템(microsoft)에서 단일톤을 허용하는 경우, 단일톤을 단일톤을 포함합니다.
공장 방법 패턴 세부 사항
공장 방법 패턴은 객체를 생성하기위한 인터페이스를 정의하지만 하위 클래스는 즉석으로 어떤 클래스를 결정합니다. 그것은 클라이언트에서 공장 방법로 오브젝트 생성의 책임을 이동하고, 개방 / 닫힌 원리를 홍보합니다.
핵심 특성
- ] 클라이언트 코드는 콘크리트 클래스를 알지 못합니다. 그것은 요약 제품 유형을 통해 작동합니다.
- Extensibility: 신규 제품 유형은 기존 클라이언트 코드를 수정하지 않고 새로운 콘크리트 공장을 만들 수 있습니다.
- Deferred 즉석:] 입력, 구성, 또는 컨텍스트를 기반으로 한 런타임에 정확한 클래스가 결정됩니다.
공장 방법이 적절하다 때
- ]관련 대상의 가족:] 시스템가 공통 인터페이스를 공유하는 여러 제품 변형과 함께 작동할 때, 다른 데이터베이스 드라이버, 문서 내보내기 형식, 또는 UI 테마.
- Decoupling client code from Concrete roles: 클라이언트는 공장 메소드를 호출하고 초기 인터페이스에 따라 객체를 수신합니다. 콘크리트 클래스로 변경하면 클라이언트에 영향을 미치지 않습니다.
- Configuration-driven Creation:] 이 응용 프로그램은 구성 파일, 환경 변수, 또는 실행 상태에 따라 사용하도록 콘크리트 공장이 시작될 수 있습니다.
계획
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
Real-World 예제: 문서 변환기
형식의 문서 변환 응용 프로그램을 고려. 요약 인터페이스는 ] 방법을 정의한다. 공장 방법 반환 , , 또는 입력 확장에 따라. 새로운 형식 추가 (예 : Markdown)는 새로운 변환기 클래스와 변환 파이프 라인에 변경하지 않는 공장 방법을 업데이트해야합니다.
직접 비교: Singleton vs. 공장 방법
둘 다 창조적인 본이더라도, 그들의 목표 및 무역 떨어져는 거의 orthogonal입니다.
| Aspect | Singleton | Factory Method |
|---|---|---|
| Primary goal | Ensure a single instance | Encapsulate object creation |
| Instance count | Exactly one | Many instances, but created through a factory |
| Control over class selection | Not relevant (always same class) | Subclasses or runtime logic choose the concrete class |
| Impact on maintainability | Can increase coupling (global access) | Reduces coupling (client depends on abstraction) |
| Testability | Often problematic (global state) | Good, as factories can be mocked |
| Extensibility | Limited (hard to subclass a singleton) | High (new products via new factories) |
단일 톤을 선택하면 오버라이드 우려가 인스턴스 고유성 및 글로벌 조정-예를 들어, 단일 파일에 쓰기를 직렬화해야 하는 로깅 서비스. 사용자 중심이 클라이언트 코드에서 디코딩 객체 생성에 있을 때 공장 방법을 선택하고 새로운 제품 변형으로 성장할 수 있는 시스템을 허용하는 GUI 툴킷을 다른 운영 체제에서 기본 버튼을 렌더링해야 합니다.
그들은 Overlap 할 때 (그리고 Neither를 사용할 때)
단일 톤은 공장 (예 : 단일 톤 [FLT : 13]]으로 사용되는 단일 톤을 볼 수 있으며 다양한 개체를 만드는 방법을 알고 있습니다. 이 접근법은 두 패턴을 결합하지만 글로벌 상태의 단점을 상속합니다. 더 나은 대안은 공장 의존성을 주입하고 공장을위한 일반 클래스로 공장을 정량적으로 잘못 선택해야합니다. 목표는 애플리케이션 전반에 걸쳐 공장 인스턴스를 공유하는 것입니다. 따라서 단일 톤은 단일 톤이 공장에 대한 구현없이 단일 톤의 패턴을 관리 할 수 있습니다. 이 목표는 단일 톤의 구현없이 단일 톤의 단일 톤의 단일 톤을 처리하는 데 필요한 것입니다.
현대 용도에 대한 실용적 고려
시험과 의존성 주입
단일 톤은 단일 톤의 단일 톤의 단일 톤의 단일 톤의 단일 톤의 단일 톤의 인터페이스를 도입하는 것입니다. 단일 톤의 인터페이스를 도입하고 테스트 더블을 제공하지만 패턴의 단순성을 밑으로합니다. 다른 한편으로는 공장 방법, 테스트에서 모방 공장을 쉽게 대체합니다. 현대 프레임 워크 (Spring, Unity, Guice)에서 컨테이너 핸들은 단일 톤의 scoping을 자동으로 처리하여 패턴을 수동으로 구현할 필요가 있습니다.
Concurrency 및 분산 시스템
Singleton은 “single 인스턴스”가 여러 프로세스 또는 노드를 해결할 수 없기 때문에 분산 된 시스템에서 중단합니다. microservices의 공유 리소스를 위해 엔지니어는 Redis, 또는 Leader 선거와 같은 데이터베이스를 공유하거나 Singleton 패턴을 사용하지 않습니다. 공장 방법은 배포 된 컨텍스트에서 적용 가능하도록 유지됩니다. 각 서비스 경계 내에서 객체를 만듭니다.
Real-World Solutions의 패턴을 결합
많은 생산 시스템은 이러한 패턴을 지능적으로 결합합니다. 예를 들어, Singleton 연결 풀]은 연결 (예를들면, 읽기 전용 대. 읽기 쓰기)의 다른 유형을 만들 수있는 공장 방법을 사용할 수 있습니다. 단일 톤은 응용 프로그램에 대한 하나의 풀을 보장하지만, 공장 방법은 연결 개체의 생성을 처리합니다. 또 다른 예: 싱글 톤 ] ]는 공장 형식을 만드는 방법을 결정하는 방법을 결정합니다.
피하기 위해 일반적인 실수
- 공장이 suffice일 때 Singleton을 사용:] 성능상의 이유로 클래스의 단일 인스턴스를 원하면, 단일 톤 범위의 의존성 주입은 글로벌 액세스보다 더 클리너입니다.
- 물체 생성이 삼관할 때 공장 방법 및 고정:] 객체 유형이 결코 변경되지 않은 경우, 하위 클래스가 없습니다, 간단한 생성자 명확하게.
- 공장과 제품 가족간의 전동 연결: 다른 곳에 속해야 하는 공장 방법 안쪽에 구성 또는 사업 논리를 넣기 피하십시오.
- 싱글톤에 실 안전장치를 공급: 서버 환경에서는, 비안전 싱글톤은 부하의 밑에 손상된 상태를 일으킬 수 있습니다.
관련 기사
단일톤과 공장 방법들은 소프트웨어 디자인의 근본적으로 다른 역할을 합니다. 단일톤은 글로벌 코디네이션의 단일 인스턴스를 시행합니다. 공장 방법 요약 오브젝트 생성은 실행 시간과 차이가 있을 수 있으며 확장성을 지원하도록 합니다. 이 중 선택은 기본 관심사가 인스턴스 고유성 또는 생성 유연성인지 여부를 평가해야 합니다. 네이터 패턴은 은 총알이며, 각 테스트 능력, 커플링, 복잡성에 대한 거래 오프를 소개합니다. 그들의 강점과 제한을 이해함으로써 엔지니어는 종종 현대의 구조체와 결합을 유지하고, 현대의 구조체를 유지하고, 현대의 구조체를 유지하고, 현대의 구조체를 유지하고, 현대의 구조에 따라 달라집니다.
더 읽기를 위해, ]Refactoring.Guru과 ]공장 방법에 고전적인 GoF 패턴을 참조하십시오. 또한 Registry]의 Martin Fowler의 분석과 Singleton에 대한 대안으로, Factory Method ] ]]].