보킹 패턴

Balking pattern

보킹 패턴은 오브젝트가 특정 상태에 있을 때만 오브젝트에 대한 액션을 실행하는 소프트웨어 설계 패턴입니다.예를 들어 개체가 ZIP 파일을 읽고 ZIP 파일이 열려 있지 않을 때 호출 메서드가 개체에 대해 get 메서드를 호출하면 개체는 요청에 따라 "balk"합니다.Java 프로그래밍 언어에서는 예를 들어,IllegalStateException이런 상황에서 던져질 수도 있습니다.

이 분야에서는 디자인 패턴보다는 안티 패턴에 더 가깝다고 생각하는 전문가도[who?] 있습니다.오브젝트가 API를 지원할 수 없는 경우 API를 제한하여 문제의 콜을 사용할 수 없도록 하거나 제한 없이 콜을 발신할 수 있도록 해야 합니다.다음과 같이 해야 합니다.

  • "현상 상태"[further explanation needed]에서 생성됨
  • 정상적인 상태가 될 때까지 그 자체를 이용할 수 없다.
  • 겉모습이 되어 멀쩡한 물체에 답한다.

사용.

이 패턴을 사용하는 객체는 일반적으로 일시적으로 중단되기 쉬운 상태이지만 알 수 없는 시간 [citation needed]동안 중단됩니다.오브젝트가 이미 알려진 유한기간 동안 정지하기 쉬운 상태로 유지되는 경우에는 보호되는 서스펜션 패턴이 바람직할 수 있다.

실행

다음은 보킹 [1]패턴의 구현에 대한 일반적인 간단한 예입니다.위의 정의에서 알 수 있듯이 "동기화된" 회선이 어떻게 사용되는지 주목해 주십시오.작업 방식에 여러 개의 콜이 있을 경우 1개만 진행되며 다른 콜은 아무것도 반환되지 않습니다.또 한 가지 주의할 점은jobCompleted()방법.동기화되는 이유는 다른 스레드가 필드의 변경을 인식할 수 있도록 하는 유일한 방법은 해당 스레드에 대한 모든 액세스를 동기화하는 것입니다.실제로는 부울 변수이므로 명시적으로 동기화되지 않고 휘발성으로 선언된 상태로 둘 수 있습니다.다른 스레드가 오래된 캐시 값을 읽지 않도록 하기 위해서입니다.

일반의 학급  {     사적인 부울 작업 진행 중 = 거짓의;      일반의 무효 () {         동기화된(이것.) {             한다면 (작업 진행 중) {                 돌아가다;             }             작업 진행 중 = 진실의;         }         // 작업을 실행할 코드가 여기에 들어갑니다.         // ...         작업 완료();     }      무효 작업 완료() {         동기화된(이것.) {             작업 진행 중 = 거짓의;         }     } } 

「 」를 참조해 주세요.

레퍼런스

  1. ^ Grand, Mark (2002). Patterns in Java, Volume 1: A Catalog of Reusable Design Patterns Illustrated with UML, Second Edition. Indianapolis, Ind: John Wiley & Sons.