访客和复合模式之间的区别?

Raj*_*san 3 design-patterns

我没有看到任何区别.看起来两个模式都试图组合对象.谁能解释这两种模式背后的意图?

Tom*_*icz 8

这些模式完全不同!首先,Composite是一种结构模式,这意味着它用于构建数据结构.访客行为模式,负责关系和行为.

为了进一步解释,您可以使用Composite构建对象树,其中所有项都是子类型T.但是,T(某种容器)的子类之一可以容纳一个子集合T.想想一个类而Item不是两个子类:ProductBox.Box可以进一步收藏Items,产品或盒子.这些嵌套的框可以保留更多的项目,因此我们有效地构建了一个树状结构.

访问者用于模拟虚拟调用以避免instanceof类似结构.请参阅"instanceof"运算符的使用是否被视为错误设计?完整的例子.访问者可以与Composite一起使用- 如上例所示,如果Item定义accept(ItemVisitor visitor)方法,您可以遍历树.

我发现很难看出这两者之间有任何相似之处.


And*_*sen 7

它们是不同的图案,但它们经常一起使用.

复合点是将相同的操作应用于共享接口的一堆元素.访问者的观点是使用新操作扩展一堆元素,而不改变其实现或调用者的实现.因此你经常看到:

Composite c = new Composite();
Visitor v = new ConcreteVisitor();
c.visit(v);
Run Code Online (Sandbox Code Playgroud)

这样,您可以保持复合的实现和复合静态中的类,并且只会改变您应用于它们的访问者的类型.