Шаблон проектирования будет называться словарем.
Просто используйте словарь и разрешайте только ключи в зависимости от переменной состояния.
Пример (C #):
class Foo
{
private Dictionary<String, object> items = new Dictionary<String, object>();
private Int32 state = 10;
public void SetField(String field, object value)
{
if ((this.FieldAllowedForCurrentState(field)) && (this.IsCorrectTypeForField(field, value)))
{
this.items[field] = value;
}
else
{
throw new InvalidArgumentException("Invalid Key for State");
}
}
}
Перегрузка не позволяет изменить тип свойства, и вы получите много разных классов, которые не очень удобны в обслуживании.
В любом случае, я действительно рекомендую проверить, можете ли вы реализовать свои требования, не прибегая к такому подходу.