diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/ExplicitStateDemo.java b/patterns/design-patterns/src/main/java/com/baeldung/state/ExplicitStateDemo.java new file mode 100644 index 0000000000..de7b54d70e --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/ExplicitStateDemo.java @@ -0,0 +1,21 @@ +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(); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/InternalStateDemo.java b/patterns/design-patterns/src/main/java/com/baeldung/state/InternalStateDemo.java new file mode 100644 index 0000000000..3148940f17 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/InternalStateDemo.java @@ -0,0 +1,15 @@ +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(); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/context/TradeContext.java b/patterns/design-patterns/src/main/java/com/baeldung/state/context/TradeContext.java new file mode 100644 index 0000000000..0f12d050db --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/context/TradeContext.java @@ -0,0 +1,29 @@ +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 + '}'; + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/states/DayTradeBehavior.java b/patterns/design-patterns/src/main/java/com/baeldung/state/states/DayTradeBehavior.java new file mode 100644 index 0000000000..540530e50b --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/states/DayTradeBehavior.java @@ -0,0 +1,11 @@ +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"); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/states/FallbackDayTradeBehavior.java b/patterns/design-patterns/src/main/java/com/baeldung/state/states/FallbackDayTradeBehavior.java new file mode 100644 index 0000000000..cf6e3ea695 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/states/FallbackDayTradeBehavior.java @@ -0,0 +1,16 @@ +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"); + } + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/states/PositionTradeBehavior.java b/patterns/design-patterns/src/main/java/com/baeldung/state/states/PositionTradeBehavior.java new file mode 100644 index 0000000000..0b1facb143 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/states/PositionTradeBehavior.java @@ -0,0 +1,11 @@ +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"); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/states/SwingTradeBehavior.java b/patterns/design-patterns/src/main/java/com/baeldung/state/states/SwingTradeBehavior.java new file mode 100644 index 0000000000..bbe8091bed --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/states/SwingTradeBehavior.java @@ -0,0 +1,11 @@ +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"); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/states/TradeBehavior.java b/patterns/design-patterns/src/main/java/com/baeldung/state/states/TradeBehavior.java new file mode 100644 index 0000000000..ef5554ab50 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/state/states/TradeBehavior.java @@ -0,0 +1,7 @@ +package com.baeldung.state.states; + +import com.baeldung.state.context.TradeContext; + +public interface TradeBehavior { + void trade(TradeContext ctx); +}