BAEL-1997 different example code
This commit is contained in:
parent
e872f156be
commit
26a28dd663
@ -0,0 +1,19 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
public class DeliveredState implements PackageState {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void next(Package pkg) {
|
||||||
|
pkg.setState(new ReceivedState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prev(Package pkg) {
|
||||||
|
pkg.setState(new OrderedState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "DeliveredState{}";
|
||||||
|
}
|
||||||
|
}
|
@ -1,21 +0,0 @@
|
|||||||
package com.baeldung.state;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
import com.baeldung.state.states.DayTradeBehavior;
|
|
||||||
import com.baeldung.state.states.PositionTradeBehavior;
|
|
||||||
import com.baeldung.state.states.SwingTradeBehavior;
|
|
||||||
|
|
||||||
public class ExplicitStateDemo {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
TradeContext tradeContext = new TradeContext(new SwingTradeBehavior());
|
|
||||||
tradeContext.trade();
|
|
||||||
|
|
||||||
tradeContext.setBehavior(new PositionTradeBehavior());
|
|
||||||
tradeContext.trade();
|
|
||||||
|
|
||||||
tradeContext.setBehavior(new DayTradeBehavior());
|
|
||||||
tradeContext.trade();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
package com.baeldung.state;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
import com.baeldung.state.states.FallbackDayTradeBehavior;
|
|
||||||
|
|
||||||
public class InternalStateDemo {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
TradeContext tradeContext = new TradeContext(new FallbackDayTradeBehavior());
|
|
||||||
tradeContext.trade();
|
|
||||||
tradeContext.trade();
|
|
||||||
tradeContext.trade();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,19 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
public class OrderedState implements PackageState {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void next(Package pkg) {
|
||||||
|
pkg.setState(new DeliveredState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prev(Package pkg) {
|
||||||
|
System.out.println("The package is in it's root state.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "OrderedState{}";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
public class Package {
|
||||||
|
|
||||||
|
private PackageState state = new OrderedState();
|
||||||
|
|
||||||
|
public PackageState getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(PackageState state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void previousState() {
|
||||||
|
state.prev(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nextState() {
|
||||||
|
state.next(this);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
public interface PackageState {
|
||||||
|
|
||||||
|
void next(Package pkg);
|
||||||
|
|
||||||
|
void prev(Package pkg);
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
public class ReceivedState implements PackageState {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void next(Package pkg) {
|
||||||
|
if (pkg.getState() instanceof ReceivedState) {
|
||||||
|
System.out.println("This package is already received by a client.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pkg.setState(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prev(Package pkg) {
|
||||||
|
pkg.setState(new DeliveredState());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ReceivedState{}";
|
||||||
|
}
|
||||||
|
}
|
@ -1,29 +0,0 @@
|
|||||||
package com.baeldung.state.context;
|
|
||||||
|
|
||||||
import com.baeldung.state.states.TradeBehavior;
|
|
||||||
|
|
||||||
public class TradeContext {
|
|
||||||
|
|
||||||
private TradeBehavior behavior;
|
|
||||||
|
|
||||||
public TradeContext(TradeBehavior behavior) {
|
|
||||||
this.behavior = behavior;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TradeBehavior getBehavior() {
|
|
||||||
return behavior;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBehavior(TradeBehavior behavior) {
|
|
||||||
this.behavior = behavior;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void trade() {
|
|
||||||
behavior.trade(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TradeContext{" + "behavior=" + behavior + '}';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package com.baeldung.state.states;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
|
|
||||||
public class DayTradeBehavior implements TradeBehavior {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trade(TradeContext ctx) {
|
|
||||||
System.out.println("Trading method: Day Trade");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
package com.baeldung.state.states;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
|
|
||||||
public class FallbackDayTradeBehavior implements TradeBehavior {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trade(TradeContext ctx) {
|
|
||||||
System.out.println("Trading method: Day Trade");
|
|
||||||
|
|
||||||
if (Math.random() > 0.4) {
|
|
||||||
ctx.setBehavior(new SwingTradeBehavior());
|
|
||||||
System.out.println("Day trading would not go well, falling back to Swing Trade");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package com.baeldung.state.states;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
|
|
||||||
public class PositionTradeBehavior implements TradeBehavior {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trade(TradeContext ctx) {
|
|
||||||
System.out.println("Trading method: Position Trade");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
package com.baeldung.state.states;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
|
|
||||||
public class SwingTradeBehavior implements TradeBehavior {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trade(TradeContext ctx) {
|
|
||||||
System.out.println("Trading method: Swing Trade");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
package com.baeldung.state.states;
|
|
||||||
|
|
||||||
import com.baeldung.state.context.TradeContext;
|
|
||||||
|
|
||||||
public interface TradeBehavior {
|
|
||||||
void trade(TradeContext ctx);
|
|
||||||
}
|
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.baeldung.state;
|
||||||
|
|
||||||
|
import com.baeldung.state.Package;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.hamcrest.CoreMatchers.instanceOf;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class StatePatternUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNewPackage_whenPackageReceived_thenStateReceived() {
|
||||||
|
Package pkg = new Package();
|
||||||
|
|
||||||
|
assertThat(pkg.getState(), instanceOf(OrderedState.class));
|
||||||
|
pkg.nextState();
|
||||||
|
|
||||||
|
assertThat(pkg.getState(), instanceOf(DeliveredState.class));
|
||||||
|
pkg.nextState();
|
||||||
|
|
||||||
|
assertThat(pkg.getState(), instanceOf(ReceivedState.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenDeliveredPackage_whenPrevState_thenStateOrdered() {
|
||||||
|
Package pkg = new Package();
|
||||||
|
pkg.setState(new DeliveredState());
|
||||||
|
pkg.previousState();
|
||||||
|
|
||||||
|
assertThat(pkg.getState(), instanceOf(OrderedState.class));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user