An attempt to apply the state design pattern to a common, difficult problem in scientific software: abstract designs that handle a multitude of algorithm implementations.