보킹 패턴
Balking pattern![]() |
보킹 패턴은 오브젝트가 특정 상태에 있을 때만 오브젝트에 대한 액션을 실행하는 소프트웨어 설계 패턴입니다.예를 들어 개체가 ZIP 파일을 읽고 ZIP 파일이 열려 있지 않을 때 호출 메서드가 개체에 대해 get 메서드를 호출하면 개체는 요청에 따라 "balk"합니다.Java 프로그래밍 언어에서는 예를 들어,IllegalStateException
이런 상황에서 던져질 수도 있습니다.
이 분야에서는 디자인 패턴보다는 안티 패턴에 더 가깝다고 생각하는 전문가도[who?] 있습니다.오브젝트가 API를 지원할 수 없는 경우 API를 제한하여 문제의 콜을 사용할 수 없도록 하거나 제한 없이 콜을 발신할 수 있도록 해야 합니다.다음과 같이 해야 합니다.
- "현상 상태"[further explanation needed]에서 생성됨
- 정상적인 상태가 될 때까지 그 자체를 이용할 수 없다.
- 겉모습이 되어 멀쩡한 물체에 답한다.
사용.
이 패턴을 사용하는 객체는 일반적으로 일시적으로 중단되기 쉬운 상태이지만 알 수 없는 시간 [citation needed]동안 중단됩니다.오브젝트가 이미 알려진 유한기간 동안 정지하기 쉬운 상태로 유지되는 경우에는 보호되는 서스펜션 패턴이 바람직할 수 있다.
실행
다음은 보킹 [1]패턴의 구현에 대한 일반적인 간단한 예입니다.위의 정의에서 알 수 있듯이 "동기화된" 회선이 어떻게 사용되는지 주목해 주십시오.작업 방식에 여러 개의 콜이 있을 경우 1개만 진행되며 다른 콜은 아무것도 반환되지 않습니다.또 한 가지 주의할 점은jobCompleted()
방법.동기화되는 이유는 다른 스레드가 필드의 변경을 인식할 수 있도록 하는 유일한 방법은 해당 스레드에 대한 모든 액세스를 동기화하는 것입니다.실제로는 부울 변수이므로 명시적으로 동기화되지 않고 휘발성으로 선언된 상태로 둘 수 있습니다.다른 스레드가 오래된 캐시 값을 읽지 않도록 하기 위해서입니다.
일반의 학급 예 { 사적인 부울 작업 진행 중 = 거짓의; 일반의 무효 일() { 동기화된(이것.) { 한다면 (작업 진행 중) { 돌아가다; } 작업 진행 중 = 진실의; } // 작업을 실행할 코드가 여기에 들어갑니다. // ... 작업 완료(); } 무효 작업 완료() { 동기화된(이것.) { 작업 진행 중 = 거짓의; } } }
「 」를 참조해 주세요.
레퍼런스
- ^ Grand, Mark (2002). Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition. Indianapolis, Ind: John Wiley & Sons.