首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >家具和测试的OOAD设计

家具和测试的OOAD设计
EN

Stack Overflow用户
提问于 2014-05-27 10:46:36
回答 1查看 844关注 0票数 1

这个问题是在一次采访中提出的。

家具可以由一种或多种材料制成。家具种类繁多,如椅子、桌子、沙发等。

家具测试取决于材料和家具类型。很少有测试是可选的,耐火的,WithStands100KgWeight的等等。

在OOAD中设计这个。该设计应遵循开放关闭原则,并应乐观,以便在未来如果增加新家具,它不应该需要更多的代码改变。

最初建议

代码语言:javascript
复制
class Furniture{
List<Material> materials;
boolean supportsTest(Test test);
}

class Chair extends Furniture{
boolean supportsTest(Test test){
// check material and based on type return true/false
}

面试官说,家具是家具,不应该说它支持不支持这个测试。有其他解决办法吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-27 11:42:21

根据你的描述和面试官的评论,这就是我所想到的:

代码语言:javascript
复制
// An interface so that it's separate from Furniture class
interface FurnitureTest {
   bool IsSupportedBy(Furniture furniture);
}

// Sample test, can add as many as you like
class FireResistable : FurnitureTest {
   public bool IsSupportedBy(Furniture furniture) {
       return furniture.Type.Name == ! "Mirror" && /* just to use the Type property */
              !furniture.HasMaterial(x => x == "Wood");
   }
}

///
/// Other class definitions.
///

// Open to extension
class Chair : Furniture { /* additional properties */ }
class Table : Furniture { /* additional properties */ }

// Closed to modification
class Furniture {
   public FurnitureType FurnitureType { get; private set; }
   private IList<Material> materials;

   public Furniture(FurnitureType type, IList<Material> materials) {
      this.materials = materials;
   }

   public bool HasMaterial(string materialName) {
      return materials.Any(x => x.Name == materialName);
   }
}

class FurnitureType {
   public string Name { get; set; }
   // ...other properties
}

class Material {
   public string Name { get; set; }
   // other properties..
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23887409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档