Jump to content
Wikipedia The Free Encyclopedia

Balking pattern

From Wikipedia, the free encyclopedia
Software design pattern
This article has multiple issues. Please help improve it or discuss these issues on the talk page . (Learn how and when to remove these messages)
This article needs additional citations for verification . Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "Balking pattern" – news · newspapers · books · scholar · JSTOR
(December 2010) (Learn how and when to remove this message)
This article includes a list of general references, but it lacks sufficient corresponding inline citations . Please help to improve this article by introducing more precise citations. (December 2010) (Learn how and when to remove this message)
This article's lead section contains information that is not included elsewhere in the article. If this information is appropriate for the lead, it should also be included in the article's body. Relevant discussion may be found on the talk page. (July 2023) (Learn how and when to remove this message)
(Learn how and when to remove this message)

The balking pattern is a software design pattern that only executes an action on an object when the object is in a particular state. For example, if an object reads ZIP files and a calling method invokes a get method on the object when the ZIP file is not open, the object would "balk" at the request. In the Java programming language, for example, an IllegalStateException might be thrown under these circumstances. In C# it would be InvalidOperationException.

There are some specialists[who? ] in this field who consider balking more of an anti-pattern than a design pattern. If an object cannot support its API, it should either limit the API so that the offending call is not available, or so that the call can be made without limitation. It should:

  • Be created in a "sane state";[further explanation needed ]
  • not make itself available until it is in a sane state;
  • become a facade and answer back an object that is in a sane state.

Usage

[edit ]

Objects that use this pattern are generally only in a state that is prone to balking temporarily but for an unknown amount of time.[citation needed ] If objects are to remain in a state which is prone to balking for a known, finite period of time, then the guarded suspension pattern may be preferred.

Implementation

[edit ]

Below is a general, simple example for an implementation of the balking pattern.[1] As demonstrated by the definition above, notice how the "synchronized" line is utilized. If there are multiple calls to the job method, only one will proceed while the other calls will return with nothing. Another thing to note is the jobCompleted() method. The reason it is synchronized is because the only way to guarantee another thread will see a change to a field is to synchronize all access to it. Actually, since it is a boolean variable, it could be left not explicitly synchronized, only declared volatile - to guarantee that the other thread will not read an obsolete cached value.

publicclass Example{
privatebooleanjobInProgress=false;
publicvoidjob(){
synchronized(this){
if(jobInProgress){
return;
}
jobInProgress=true;
}
// Code to execute job goes here
// ...
jobCompleted();
}
voidjobCompleted(){
synchronized(this){
jobInProgress=false;
}
}
}

See also

[edit ]

References

[edit ]
  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.
Gang of Four
patterns
Creational
Structural
Behavioral
Concurrency
patterns
Architectural
patterns
Other
patterns
Books
People
Communities
See also


Stub icon

This computer-programming-related article is a stub. You can help Wikipedia by expanding it.

AltStyle によって変換されたページ (->オリジナル) /