Often such designs are better served by using inheritance to select the proper object (algorithm) at startup time.