我对访问者模式和泛型有问题。我有一个抽象班,他们的孩子要去看望。查看此代码:
public abstract class Element extends SomeSuperClass {
public void accept(Visitor<? extends Element> v) {
v.visit(this);
}
}
public interface Visitor<T extends SomeSuperClass> {
void visit(T element);
}
因此,我的想法是:我有一些类层次结构(例如,元素
是某个超类
的子类)。我有一些通用的访问者界面来访问这个层次结构。现在在这个层次结构的中间是元素类,它是抽象的,有自己的子类。
现在,我希望元素接受其子类的所有访问者,这就是为什么我写这行:
public void accept(Visitor<? extends Element> v)
但现在我收到错误:
类型<代码>访问者中的方法访问(<代码>捕获#1-of?扩展元素
我明白了?扩展元素不是元素。我的问题是:我能用不同的方式表达我的想法吗?或者我刚刚错过了这种情况下泛型的概念?
注意中的
T
您拥有的代码调用访问者。访问(要素e)
,但所涉及的访客可能是访客
我认为“元素必须接受其子类的所有访问者”的要求没有意义:访问者必须至少能够访问元素及其所有子类。那将是一位访客
构造接受(访问者
我认为你想做的没有多大意义。将访问者设置为泛型是无用的:accept()方法必须以特定的访问者接口为参数,这样元素的子类就可以调用visit()的特定重载。
interface Visitor {
void visit(Element e);
void visit(SubElement e);
}
class Element {
public void accept(Visitor v) {
v.visit(this);
}
}
class SubElement {
public void accept(Visitor v) {
v.visit(this);
}
}
class ElementVisitor implements Visitor {
public void visit(Element e) {}
public void visit(SubElement e) {}
}
请注意,Visitor接口必须知道元素hyerarchy中需要自定义visit()实现的所有类。
这不起作用-的访问者?扩展Element
可能需要能够访问Element
没有或不知道的数据(属性/方法,...)。
您不能让应该访问扩展Element
的对象的访问者必须能够访问直接的Element
或甚至另一个完全独立的Element
子类。
主要内容:介绍,实现,ComputerPart.java,Keyboard.java,Monitor.java,Mouse.java,Computer.java,ComputerPartVisitor.java,ComputerPartDisplayVisitor.java,VisitorPatternDemo.java在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行
亦称: Visitor 意图 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。 问题 假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。 图像中的每个节点既能代表复杂实体 (例如一座城市), 也能代表更精细的对象 (例如工业区和旅游景点等)。 如果节点代表的真实对象之间存在公路, 那么这些节点就会相互连接。 在程序内部, 每个节点的类型都由其所属的类来表示, 每个特定
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 介绍 意图:主要将数据结构与数据操作分离。 主要解决:稳定的数据结构和易变的操作耦合问题。 何时使用:需要对一个对象结构中的对象进行
简介 访问者模式是一种将算法与对象结构分离的软件设计模式。 这个模式的基本想法如下:首先我们拥有一个由许多对象构成的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象;访问者是一个接口,它拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素作出不同的反应;在对象结构的一次访问过程中,我们遍历整个对象结构,对每一个元素都实施accept方法,在每一个元素的accept方
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 介绍 意图:主要将数据结构与数据操作分离。 主要解决:稳定的数据结构和易变的操作耦合问题。 何时使用:需要对一个对象结构中的对象进行
访问者模式 不知不觉当中,我们就到了最后一种设计模式,即访问者模式。访问者模式,听上去复杂一些。但是,这种模式用简单的一句话说,就是不同的人对不同的事物有不同的感觉。比如说吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜欢这两种豆腐。四川的朋友可能更喜欢辣豆腐,江浙的人就可能对臭豆腐更喜欢一些。那么,这种情况应该怎么用设计模式表达呢? typedef struct _Tof