class RedOrGreenFrobber { private Frobber frobber; private RedOrGreenFrobber(Frobber value) { this.frobber = value; } public Value { get { return frobber; } } public static RedOrGreenFrobber RedOrGreen(bool green) { ... } // return a green or red frobber } interface Frobber { void Frob(Frotz frotz); } class RedFrobber implements Frobber { ... } class GreenFrobber implements Frobber { ... } public sealed class Frotz { public void Frobbit(RedOrGreenFrobber frobber) { ... frobber.Value.Frob(this); ... } }