我有几种类型,例如车轮,刹车,发动机,离合器,AutoBox,ManualBox,ElectricWindow,RearParkingSensor,HeatedSeats。这些都继承了一个ICarPart标记接口(可以是一个属性(java注释),但在这个阶段并不重要)。
然后,我编写了我的汽车类,它可以表示所有的汽车类型。
class Car
{
string Name;
DateTime creationDate;
string ID;
IList<ICarPart> parts;
}然后我写了一家工厂来制造汽车。工厂可以参考一些XML,这是一个针对不同汽车类型的成分列表。例如(请忽略格式,这只是为了说明):
<ExpensiveCar>
<Name>Expensive Car</Name>
<Parts>
<HeatedSeats/>
<Wheel count=4/>
<RearParkingSensor/>
<ElectricWindow type=FrontAndBack/>
</Parts>
</ExpensiveCar>工厂将解析此成分列表并创建car对象。新的汽车类型将提供给系统,只要部件已被编码并编写了成分列表XML。
问题:
提前谢谢。如果有任何不清楚,请评论,我将修改/udpate/提供更多的细节。
发布于 2009-03-11 09:54:10
描述的模式是构建器模式。构建器模式从一组简单的部分构建复杂的对象。有时,由构建器模式构建的对象是复合对象(尽管在问题的情况下并不是必要的)。
构建器模式通常是使用硬编码的成分列表来演示的,尽管模式中没有任何需要这样做的东西,而且似乎也没有描述“成分列表”方法的特定模式。
不是
可能是通过:
\x{e76f}\x{e76f}
注意,因为这是一个实例,所以文本"ExpensiveCar : Car“应该加下划线,但不允许我这样做。
我在这里使用的用部件初始化数组的表示法并不好,也可能不是最好的方法。也许另一种选择是添加一个包含实际XML的UML注释。重要的是,客户端可以看到什么制造了昂贵的汽车,程序员也能看到。
发布于 2009-03-10 12:56:57
这种模式叫什么?还是仅仅是多种模式结合在一起?
您有工厂法模式(创建汽车对象)和良好的旧组合(创建汽车的车轮,座椅等)。后者是一种构图的变化。
发布于 2009-03-10 13:33:17
我认为这可能是抽象工厂模式,因为您希望这组部件能够相互兼容。你可能不想让卡车轮胎安装在紧凑型汽车的轮子上。
https://stackoverflow.com/questions/629997
复制相似问题