Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ConcreteStrategy0 {
- public void doStrategy(SomeType someData) {
- switch( somefunc(someData ) {
- case 0: ConcreteStrategy1.singleton.doStrategy(someData); break;
- case 1: ConcreteStrategy2.singleton.doStrategy(someData); break;
- default: ConcreteStrategy3.singleton.doStrategy(someData); break;
- }
- }
- new ConcreteStrategy0().doStrategy(someData);
- // Inject strategy: Delegate object creation to a factory
- new ConcreteStrategy0().doStrategy(StrategyFactory.Create(), someData);
- // And update "doStrategy" to,
- public void doStrategy(IStrategy strategy, SomeType someData)
- {
- strategy.singleton.doStrategy(someData);
- }
- // OR Let the strategy do stuff instead
- StrategyFactory.Create().doStrategy(someData);
- <bean id="client" class="...">
- <property name="strategy" ref="dispatcherStartegy"/>
- </bean>
- <bean id="dispatcherStartegy" class="...">
- <property name="strategies">
- <map>
- <entry key="0" ref="concreteStrategy1"/>
- <entry key="1" ref="concreteStrategy2"/>
- </map>
- </property>
- <property name="fallbackStrategy" ref="concreteStrategy3"/>
- </bean>
- <bean id="concreteStrategy1" ... />
- <bean id="concreteStrategy2" ... />
- <bean id="concreteStrategy3" ... />
- class Client {
- Strategy strategy;
- public void setStrategey(Strategy strategy {... }
- public void doSomething(...) {
- ...
- strategy.doStrategy(...);
- ...
- }
- }
- class DispatcherStrategy implements Strategy {
- Map<Integer,Strategy> strategies;
- Strategy fallbackStrategy;
- ... getters, setters ...
- public void doStrategy(...) {
- Strategy s = strategies.get(keyFromArguments);
- if ( s==null ) {
- s = fallbackStrategy
- }
- s.doStrategy(...)
- }
- }
Add Comment
Please, Sign In to add comment