mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-10-13 12:14:51 +00:00
docs: improve Balking pattern docs
This commit is contained in:
1 parent
a4a4edf990
commit
8a91cbba89
2 files changed
+26
-8
No files matched your search
+22
-3
@@ -8,8 +8,7 @@ tag:
|
|||||||
|
|
||||||
## Intent
|
## Intent
|
||||||
|
|
||||||
Balking Pattern is used to prevent an object from executing a certain code if it is in an incomplete
|
Balking Pattern is used to prevent an object from executing a certain code if it is in an incomplete or inappropriate state. If the state is not suitable for the action, the method call is ignored (or "balked").
|
||||||
or inappropriate state.
|
|
||||||
|
|
||||||
## Explanation
|
## Explanation
|
||||||
|
|
||||||
@@ -126,11 +125,31 @@ Use the Balking pattern when
|
|||||||
* You want to invoke an action on an object only when it is in a particular state
|
* You want to invoke an action on an object only when it is in a particular state
|
||||||
* Objects are generally only in a state that is prone to balking temporarily but for an unknown
|
* Objects are generally only in a state that is prone to balking temporarily but for an unknown
|
||||||
amount of time
|
amount of time
|
||||||
|
* In multithreaded applications where certain actions should only proceed when specific conditions are met, and those conditions are expected to change over time due to external factors or concurrent operations.
|
||||||
|
|
||||||
|
## Known Uses:
|
||||||
|
|
||||||
|
* Resource pooling, where resources are only allocated if they are in a valid state for allocation.
|
||||||
|
* Thread management, where threads only proceed with tasks if certain conditions (like task availability or resource locks) are met.
|
||||||
|
|
||||||
|
## Consequences:
|
||||||
|
|
||||||
|
Benefits:
|
||||||
|
|
||||||
|
* Reduces unnecessary lock acquisitions in situations where actions cannot proceed, enhancing performance in concurrent applications.
|
||||||
|
* Encourages clear separation of state management and behavior, leading to cleaner code.
|
||||||
|
* Simplifies the handling of operations that should only be performed under certain conditions without cluttering the caller code with state checks.
|
||||||
|
|
||||||
|
Trade-offs:
|
||||||
|
|
||||||
|
* Can introduce complexity by obscuring the conditions under which actions are taken or ignored, potentially making the system harder to debug and understand.
|
||||||
|
* May lead to missed opportunities or actions if the state changes are not properly monitored or if the balking condition is too restrictive.
|
||||||
|
|
||||||
## Related patterns
|
## Related patterns
|
||||||
|
|
||||||
|
* [Double-Checked Locking Pattern](https://java-design-patterns.com/patterns/double-checked-locking/)
|
||||||
* [Guarded Suspension Pattern](https://java-design-patterns.com/patterns/guarded-suspension/)
|
* [Guarded Suspension Pattern](https://java-design-patterns.com/patterns/guarded-suspension/)
|
||||||
* [Double Checked Locking Pattern](https://java-design-patterns.com/patterns/double-checked-locking/)
|
* [State](https://java-design-patterns.com/patterns/state/)
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
package com.iluwatar.balking;
|
package com.iluwatar.balking;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,6 +35,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
public class WashingMachine {
|
public class WashingMachine {
|
||||||
|
|
||||||
private final DelayProvider delayProvider;
|
private final DelayProvider delayProvider;
|
||||||
|
|
||||||
|
@Getter
|
||||||
private WashingMachineState washingMachineState;
|
private WashingMachineState washingMachineState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,10 +63,6 @@ public class WashingMachine {
|
|||||||
this.washingMachineState = WashingMachineState.ENABLED;
|
this.washingMachineState = WashingMachineState.ENABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WashingMachineState getWashingMachineState() {
|
|
||||||
return washingMachineState;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method responsible for washing if the object is in appropriate state.
|
* Method responsible for washing if the object is in appropriate state.
|
||||||
*/
|
*/
|
||||||
@@ -83,7 +82,7 @@ public class WashingMachine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method responsible of ending the washing by changing machine state.
|
* Method is responsible for ending the washing by changing machine state.
|
||||||
*/
|
*/
|
||||||
public synchronized void endOfWashing() {
|
public synchronized void endOfWashing() {
|
||||||
washingMachineState = WashingMachineState.ENABLED;
|
washingMachineState = WashingMachineState.ENABLED;
|
||||||
|
|||||||
Reference in new issue
Block a user