gpt4 book ai didi

java - 访客与组合

转载 作者:行者123 更新时间:2023-12-01 18:00:14 25 4
gpt4 key购买 nike

据我所知,访问者设计模式与组合的工作方式非常相似。在组合中,我将在类中保存一个接口(interface)成员,并在构造函数中传递该接口(interface)的具体实现,然后将一个方法委托(delegate)给它或在类中使用它。

在访问者设计模式中,我还有接口(interface)的具体实现,并将其发送到访问方法,然后访问方法将访问方法委托(delegate)给它。

为了在代码中显示这种相似性,访问者将:

VisitorInterface v = new ConcreteVisitor();
MyClass c = new MyClass();
c.visit(v);
VisitorInterface dv = new DifferentVisitor();
c.visit(dv);

组成如下:

SomeInterface i = new ConcreteImplementation();
MyClass c = new MyClass(i);
c.visit(); // called visit just to show the symmetry to visitor pattern
SomeInterface di = new DifferentImplementation();
c.changeReference(di);
c.visit();

我想听听您的想法,在哪些情况下您会更喜欢其中一种,以及为什么

最佳答案

组合是表达对象之间has-a关系的方法,换句话说,就是对对象的属性进行建模。牛角。注入(inject)对此不是必需的。访问者模式是一种对类型执行外部操作的方法。它们服务于不同的目的并在对象模型的不同部分上操作。为了回答你的问题,当情况的逻辑要求类型具有属性时,我更喜欢组合,并且使用访问者模式来组织代码以对类型的实例执行操作而不改变结构目标类型的类型,如该模式的文档所示。

关于java - 访客与组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41543074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com