请问GOF设计模式中Builder模式的图是不是写错了??晕啊
图论坛不支持画,不过这种图网上都有下的。
问题是:在Builder模式中
Director类 “关联(聚合)”了Builder抽象类
问题是,在他提供代码中
Maze *MazeGame::CreateMaze (MazeBuilder& builder){
builder.BuildMaze();
builder.BuildRoom(1);
builder.BuildRoom(2);
return builder.GetMaze();
}//MazeGame 相当于Director
2个类之间明明是依赖关系,Director只是暂时的用到了Builder,是 "use a "的关系
而关联呢?应该是一种永久的结构性关系,应属于域可见,而不是参数可见
我觉得只能说,这2者之间的关系比较紧,却不能说“关联”!!!
不知道我说的对不对 望高手指点~~~~~~
[解决办法]
应该是聚合把,里面特别提出使用类聚合来代替继承
[解决办法]
Builder的存在依赖于Director的存在,所以也可以说是Aggregate。
http://xilaile.blogjava.net
[解决办法]
是聚合还是相识,依赖于关联两者的生存期和关联程度。
GoF也强调二者在实现和表示上没有太大区别,用聚合可以表明二者不是简单的在一两次操作上有关联,其耦合程度要高。
builder.BuildMaze();
builder.BuildRoom(1);
builder.BuildRoom(2);
可以说聚合关系是对象组合的一个典范。体现了不同于继承的良好封装和动态特性。
[解决办法]
Director 使用了 Builder创建子对象
初看是仅仅为依赖关系
但在你使用该模式时,创建的对象是不是需要拿来使用呢?
既然要用那么就需要返回一个组合对象,这就建立了关联关系
GOF的设计模式没有明确说明这个隐含条件
当你具体使用这个模式设计时你就能体会到了
设计模式提供的是一个思想,在使用时都是可以灵活变通的,并不需要在这些细节上斤斤计较
[解决办法]
支持:yanluo129(仰望天堂) ( ) 信誉:100
设计模式提供的解决某类问题的思想,而《GOF的设计模式》中仅仅是解决这类问题的一个范例,而非标准、原则。