BAEL-1997 different example code

This commit is contained in:
Denis 2018-08-07 21:28:06 +02:00
parent e872f156be
commit 26a28dd663
14 changed files with 124 additions and 121 deletions

View File

@ -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{}";
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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{}";
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,8 @@
package com.baeldung.state;
public interface PackageState {
void next(Package pkg);
void prev(Package pkg);
}

View File

@ -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{}";
}
}

View File

@ -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 + '}';
}
}

View File

@ -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");
}
}

View File

@ -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");
}
}
}

View File

@ -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");
}
}

View File

@ -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");
}
}

View File

@ -1,7 +0,0 @@
package com.baeldung.state.states;
import com.baeldung.state.context.TradeContext;
public interface TradeBehavior {
void trade(TradeContext ctx);
}

View File

@ -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));
}
}