子类中专用属性的设计模式

时间:2012-05-29 18:23:03

标签: .net oop design-patterns inheritance subclass

C# Accessing a subclass property的重复 - 请参阅其他解决方法。

我有一个对象模型,其中每个对象都有一个父对象,我想访问具有每个对象的特定类型的父属性。所以例如Wheel应具有Car类型的父属性。我的猜测是,有一种既定的设计模式可以实现这一目标(在.NET中)。但是,我还没有找到它,所以我提出的设计看起来像这样

public class BaseObject<T> where T : BaseObject<T>
{
    private T mParent;
    protected T Parent
    {
        get { return mParent; }
    }

    public BaseObject(T parent)
    {
        mParent = parent;
    }

    public void Save() ...
    public void Delete() ...
    public BaseObject<T> Clone() ...
}

public class Car : BaseObject<Car>
{
    public Car(Car parent) : base(parent)
    {
    }

    public bool Is4WD()
    {
        return true;
    }
}

public class Wheel : BaseObject<Car>
{
    public Wheel(Car parent) : base(parent)
    {
    }

    public float RequiredTirePressure()
    {
        return Parent.Is4WD() ? 3.0f : 2.5f;
    }
}

您认为这种方法存在任何设计或性能缺陷吗?你能推荐一个更好的设计吗?

1 个答案:

答案 0 :(得分:3)

答案是使用composition instead of inheritance。轮子不是汽车,所以它不应该从Car延伸。相反,让Wheel在其构造函数中使用Car

例如:

public class Wheel {
    private Car car;

    public Wheel(Car car) {
        this.car = car;
    }

    public float RequiredTirePressure() {
        return car.Is4WD() ? 3.0f : 2.5f;
    }
}