改变对象的设计模式

时间:2010-05-14 22:25:08

标签: design-patterns

是否有支持不同排列对象的设计模式?

版本1

public class myOjbect {

  public string field1 { get; set; } /* requirements: max length 20 */
  public int field2 { get; set; }
  . . .
  public decimal field20 { get; set; }
}

第2版

public class myObject {

  public string field1 { get; set; } /* requirements: max length 40 */
  public int field2 { get; set; }
  . . .
  public double field20 { get; set; } /* changed data types */
  . . ./* 1 new properties */
  public double field21 { get; set; } 
}

当然我可以有单独的对象,但是认为这种事情可能有一个很好的模式。

3 个答案:

答案 0 :(得分:2)

继续想到继承;)

答案 1 :(得分:2)

设计模式将被称为字典。

只需使用字典,只允许键取决于状态变量。

示例(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");
    }
  }
}

重载不允许更改属性的类型,并且最终会有许多不同的类,这些类不是很难维护。

无论如何,我真的建议您检查一下是否可以实现您的要求而不必使用这样的方法。

答案 2 :(得分:0)

从MyObject下降新类MyObjectV2可用于修改field1的行为并添加10个新字段;
它不允许修改已提交的200的性质。