当一个类与其他类对象“有”关系时

时间:2013-07-09 17:08:48

标签: c# coupling

假设我们有一个汽车,轮子和刹车类。汽车“有”四个轮子所以当创建一个Car实例时,我想要同时创建4个轮子实例。同样,如果我正在创建一个摩托车,我希望创建两个轮子实例。我的问题是如何在创建Car类时最好地创建Wheel实例并命名它们?

现在假设您要将制动器分配给特定的车轮 - 即:FrontBrakes连接到frontLeft,frontRight车轮。我应该尝试在Wheel类中创建一个名为AttachedTo的属性吗?如何分配所有权,以便说明特定车轮的刹车?

public class Car
{
    public Car()
    {
        Wheel frontLeft = new Wheel();
        Wheel frontRight = new Wheel();
        Wheel backLeft = new Wheel();
        Wheel backRight = new Wheel();
        Brake frontBrakes = new Brake();
        Brake backBrakes = new Brake();
    }
}

public class Wheel
{
    public int Size;
    public string Brand;
    public Brake AttachedTo { get; set; }
}

public class Brake
{
    public string Type;
}

3 个答案:

答案 0 :(得分:3)

绝对不要附属于财产。我只是将轮子作为适当类的属性,但是一个名为attach的属性是一种尴尬的方法。

这看起来很好用于Builder模式 http://www.dofactory.com/Patterns/PatternBuilder.aspx

通常使用SOLID并且更喜欢组合而不是继承。 http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

答案 1 :(得分:0)

我建议汽车没有直接刹车,汽车有轮子,车轮有刹车。

我还建议您使用FrontWheel和BackWheel子类化Wheel。如果你不这样做,那么至少,wheel应该有一个FrontOrBack属性,这需要在构造函数中指定。

答案 2 :(得分:0)

由于车轮位置和制动类型是常数,因此枚举可能是合适的。然后车轮位置和制动类型将成为车轮类中的属性。将braketype设为只读,并根据车轮位置在构造函数中设置它。