The balking pattern is a
software design pattern
In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code ...
that only executes an action on an
object
Object may refer to:
General meanings
* Object (philosophy), a thing, being, or concept
** Object (abstract), an object which does not exist at any particular time or place
** Physical object, an identifiable collection of matter
* Goal, an ai ...
when the object is in a particular state. For example, if an object reads
ZIP
Zip, Zips or ZIP may refer to:
Common uses
* ZIP Code, USPS postal code
* Zipper or zip, clothing fastener
Science and technology Computing
* ZIP (file format), a compressed archive file format
** zip, a command-line program from Info-ZIP
* Zi ...
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
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's List ...
programming language, for example, an
IllegalStateException
might be thrown under these circumstances.
There are some specialists in this field who consider balking more of an
anti-pattern than a design pattern. If an object cannot support its
API
An application programming interface (API) is a way for two or more computer programs to communicate with each other. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standa ...
, 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";
* 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
Objects that use this pattern are generally only in a state that is prone to balking temporarily but for an unknown amount of time. 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
Below is a general, simple example for an implementation of the balking pattern.
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.
public class Example
See also
*
Read and write lock pattern
*
Guarded suspension pattern
References
Software design patterns
Articles with example Java code
Concurrency (computer science)
{{compu-prog-stub