Balking Pattern
   HOME

TheInfoList



OR:

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