首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个工厂类型模式的名称是什么,我如何用UML来表示它?

这个工厂类型模式的名称是什么,我如何用UML来表示它?
EN

Stack Overflow用户
提问于 2009-03-10 12:51:35
回答 3查看 397关注 0票数 1

我有几种类型,例如车轮,刹车,发动机,离合器,AutoBox,ManualBox,ElectricWindow,RearParkingSensor,HeatedSeats。这些都继承了一个ICarPart标记接口(可以是一个属性(java注释),但在这个阶段并不重要)。

然后,我编写了我的汽车类,它可以表示所有的汽车类型。

代码语言:javascript
复制
class Car
{
    string Name;
    DateTime creationDate;
    string ID;

    IList<ICarPart> parts;
}

然后我写了一家工厂来制造汽车。工厂可以参考一些XML,这是一个针对不同汽车类型的成分列表。例如(请忽略格式,这只是为了说明):

代码语言:javascript
复制
<ExpensiveCar>
  <Name>Expensive Car</Name>
  <Parts>
    <HeatedSeats/>
    <Wheel count=4/>
    <RearParkingSensor/>
    <ElectricWindow type=FrontAndBack/>
  </Parts>
</ExpensiveCar>

工厂将解析此成分列表并创建car对象。新的汽车类型将提供给系统,只要部件已被编码并编写了成分列表XML。

问题:

  1. 这种模式叫什么?还是仅仅是多种模式的结合呢?
  2. 这些都是反模式吗?
  3. 我如何用UML来表示它呢?我可以为零件和基车类做一个类图。我将如何显示当前支持的该类的实例以及它们所拥有的部分?

提前谢谢。如果有任何不清楚,请评论,我将修改/udpate/提供更多的细节。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-11 09:54:10

  1. 这种模式叫什么?还是仅仅是多种模式的结合呢?

描述的模式是构建器模式。构建器模式从一组简单的部分构建复杂的对象。有时,由构建器模式构建的对象是复合对象(尽管在问题的情况下并不是必要的)。

构建器模式通常是使用硬编码的成分列表来演示的,尽管模式中没有任何需要这样做的东西,而且似乎也没有描述“成分列表”方法的特定模式。

  1. 这些都是反模式吗?

不是

  1. 我如何用UML来表示它呢?

可能是通过:

  1. 定义类图,将部分显示为类以及Car类。显示每个部件类实现ICarPart接口。
  2. 也许在单独的(但链接的)类图上,使用UML实例表示法显示car类的命名实例。实例类表示允许您指定属性在该类中的值。

\x{e76f}\x{e76f}

注意,因为这是一个实例,所以文本"ExpensiveCar : Car“应该加下划线,但不允许我这样做。

我在这里使用的用部件初始化数组的表示法并不好,也可能不是最好的方法。也许另一种选择是添加一个包含实际XML的UML注释。重要的是,客户端可以看到什么制造了昂贵的汽车,程序员也能看到。

票数 1
EN

Stack Overflow用户

发布于 2009-03-10 12:56:57

这种模式叫什么?还是仅仅是多种模式结合在一起?

您有工厂法模式(创建汽车对象)和良好的旧组合(创建汽车的车轮,座椅等)。后者是一种构图的变化。

票数 1
EN

Stack Overflow用户

发布于 2009-03-10 13:33:17

我认为这可能是抽象工厂模式,因为您希望这组部件能够相互兼容。你可能不想让卡车轮胎安装在紧凑型汽车的轮子上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/629997

复制
相关文章

相似问题

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