合肥建公司网站,cho菌主题wordpress,嘉兴平湖网站建设,德吉机械东莞网站建设目录
0、定义
1、访问者模式的五种角色
2、访问者模式的UML类图
3、示例代码 0、定义 表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各个元素的类的前提下#xff0c;定义作用于这些元素的新操作。
1、访问者模式的五种角色
抽象元素#xff08;Element…目录
0、定义
1、访问者模式的五种角色
2、访问者模式的UML类图
3、示例代码 0、定义 表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各个元素的类的前提下定义作用于这些元素的新操作。
1、访问者模式的五种角色
抽象元素Element一个接口该接口定义了接收访问者的accept操作。具体元素Concrete ElementElement的实现类。对象结构Object Structure一个集合用于存放Element对象提供遍历它自己的方法。抽象访问者Visitor一个接口该接口定义操作对象ConcreteElement的实例的方法。具体访问者Concrete Visitor实现Visitor接口的类。
2、访问者模式的UML类图 3、示例代码
抽象元素
package xyz.jangle.design.visitor;public interface Element {public void accept(Visitor v);
}具体元素A和B
package xyz.jangle.design.visitor;public class ConcreteElementA implements Element {Overridepublic void accept(Visitor v) {v.visit(this);}}package xyz.jangle.design.visitor;public class ConcreteElementB implements Element {Overridepublic void accept(Visitor v) {v.visit(this);}}抽象访问者
package xyz.jangle.design.visitor;public interface Visitor {public void visit(ConcreteElementA a);public void visit(ConcreteElementB b);
}具体访问者1 和2
package xyz.jangle.design.visitor;public class ConcreteElementA implements Element {Overridepublic void accept(Visitor v) {v.visit(this);}}package xyz.jangle.design.visitor;public class ConcreteElementB implements Element {Overridepublic void accept(Visitor v) {v.visit(this);}}客户端使用
package xyz.jangle.design.visitor;import java.util.ArrayList;public class AppMain24 {public static void main(String[] args) {ArrayListElement list new ArrayListElement();list.add(new ConcreteElementA());list.add(new ConcreteElementA());list.add(new ConcreteElementA());list.add(new ConcreteElementB());list.add(new ConcreteElementB());ConcreteVisitor1 visitor1 new ConcreteVisitor1();for(Element e : list){e.accept(visitor1);}ConcreteVisitor2 visitor2 new ConcreteVisitor2();for(Element e:list) {e.accept(visitor2);}}}输出结果
这是访问者1的方法可以访问ConcreteElementA的属性
这是访问者1的方法可以访问ConcreteElementA的属性
这是访问者1的方法可以访问ConcreteElementA的属性
这是访问者1的方法可以访问ConcreteElementB的属性
这是访问者1的方法可以访问ConcreteElementB的属性
这是访问者2的方法可以访问ConcreteElementA的属性
这是访问者2的方法可以访问ConcreteElementA的属性
这是访问者2的方法可以访问ConcreteElementA的属性
这是访问者2的方法可以访问ConcreteElementB的属性
这是访问者2的方法可以访问ConcreteElementB的属性