Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Won't Do
-
0.6
-
None
-
None
Description
This is not completely thought out yet, but if folks like the idea I might persue it further.
I would like to use AbstractStateMachine but cannot extend from it:
class B extends A /*, AbstractStateMachine */ {
// copy source from AbstractStateMachine here
}
I propose here a StateMachineSupport class that provides for use by subclassing and for use by delegation. The constructors are a little messy, but in the end I have
public class StateMachineSupport {
// use by subclassing
protected StateMachineSupport(...) {
}
// use by delegation
public StateMachineSupport(Object delegator, ...) {
}
// ... methods from AbstractStateMachine
}
public abstract class AbstractStateMachine extends StateMachineSupport {
protected AbstractStateMachine(...)
}
// use by subclassing
class ConcreteStateMachine extends AbstractStateMachine {
ConcreteStateMachine()
public void reset()
{ ... }public void running() { ... }
public void paused()
{ ... }public void stopped() { ... }
}
// use by delegation
class DelegatingStateMachine extends SomethingElse {
StateMachineSupport delegate;
DelegatingStateMachine()
{ delegate = new StateMachineSupport(this, ..."stopwatch.xml"); }public void reset()
{ ... }public void running() { ... }
public void paused()
{ ... }public void stopped() { ... }
}
StateMachineSupport.java, AbstractStateMachine2.java, StateMachineSupportTest.java, and AbstractStateMachine2Test.java attached.