管理对象状态/设置的模式?

Hom*_*mde 1 c# oop design-patterns

我有一些困境,并会欣赏一些意见.

我有这个类,让我们称之为"Car",其中每个实例都有一些单独的设置(通过属性),如"Color","HasGearShift"或诸如此类(我正在为一个简单的例子做这个).这些应该是用户可自定义的,但也应该有默认值.

因此,自然的解决方案是采用所有"设置"属性并将它们分解为可以序列化/反序列化的单独"设置"类.每个Car类还可以继承Settings类,其中一个类设置默认值,并且可以序列化为用户自定义的基础.到现在为止还挺好.

我觉得问题是我要么必须在整个代码中使用这种语法: someCar.Settings.HasGearShift甚至有一些像这样:someCar.Settings.GearBox.CurrentGear但至少没有冗余,所有内容都很好地封装在Settings类中.

另一个选项是将属性保留在Car类上,只需将它们从Settings类复制到类中即可.然后我可以someCar.HasGearShift再简单地写一下.使引用属性更简洁,但意味着如果我添加/删除某些内容,我必须更改两个类中的设置.

你会选择哪一种,或者我错过了第三种更好的方式?我倾向于第二个选项,否则代码中只会有太多"trainwrecks":)

dri*_*iis 6

我想我会在两者之间寻找一些东西:使用合成并使用所需的设置制作CarSettings类,并使其可序列化.也许有一个静态的CarSettings.Default属性; 它定义了默认设置.然后Car可以在构造函数中获取设置实例,并公开设置的委托属性,这些属性需要在外部可见.

有点像:

public class Car
{
    private CarSettings settings;

    public Car(CarSettings settings) 
    {
        settings = settings ?? CarSettings.Default;
    }

    public string Color { get {return settings.Color;} }
}

public class CarSettings 
{
     public string Color {get; private set;}
     public static CarSettings Default = new CarSettings {Color = "Red"};
}
Run Code Online (Sandbox Code Playgroud)