2

最近我参加了一个面试,被问到这个问题:

问题: 带着以下实体,设计一个类图或骨架代码:

实体是:

garment shirt pant fabric buttons zip

The best I could do was this:


class Shirt : Fabric 
{
  Buttons buttons {get;set;}
  //Inherits all Fabric methods

  MakeShirt()  
  {
    //make a shirt here
  }
}

class Pant : Fabric
{
  Buttons buttons {get;set;}
  // Inherits all Fabric methods

  MakePant()
  {
     //Make a pant here
  }
}


class Fabric
{
  private MaterialType materialType {get;set;}
  private FabricType fabricType {get;set;}

  Fabric(MaterialType mType, FabricType fType)
  {
     this.materialType = mtype;
     this.fabricType = fType;
  }

  public GetFabricMaterial();
  public GetFabricType();

}

class Garment : IGarment
{
  Price price {get;set;}
  Audience audience {get;set;}
}

enum FabricType
{
  Fabric_Formal,
  Fabric_Casual,
}

enum MaterialType
{
   Fabric_Cotton,
   Fabric_Silk,
   Fabric_Wool, 
}

class Buttons
{
Color color {get;set;}
Shape shape {get;set;}
}

class Zip
{
Color color {get;set;}
Size size {get;set;}
}

但是我仍然可以看到上面的骨架代码中遗漏了很多东西。

  1. 我如何Garment与其他实体关联(对象关系!?)
  2. MakeShirt()函数和的返回类型可以是什么MakePant()
  3. 在回答这些问题时,哪种方法最好?换句话说,如何处理这类问题?

对此的任何意见表示赞赏。(如果这不是这里要问的正确问题,请让我知道将其移至正确的 stackoverflow 站点!)

4

2 回答 2

2

我想你想多了,我认为它是这样的。裤子和衬衫是Garment。服装由织物制成。

裤子有拉链,衬衫有纽扣。

public enum Fabric { Cotton, Silk, Poly }

public abstract Garment{


    public Fabric Fabric {get; set; }
}

class Buttons
{
  Color color {get;set;}
  Shape shape {get;set;}
}
class Zip
{
   Color color {get;set;}
   Size size {get;set;}
}

public class Shirt : Garment{
   public Buttons Buttons { get; set;} 
}
public class Pants : Garment{
  public Zip Zip { get; set;}
}
于 2014-04-01T13:39:31.373 回答
1

这更像是一种亲子关系的练习。我原以为是你的抽象基类并Garment从中继承。,并且都是a 的属性ShirtPantFabricButtonsZipGarment

我不会有特定的 Make 方法。特定 Garment 类型的构造函数应该使 Garment 类型准备就绪,而不是在初始化之后。

于 2014-04-01T13:38:36.820 回答