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