Visitor(访问者模式)
类型:行为模式
目的:表示一个作用于某个对象结构中的各元素的操作
在不改变各元素的类的前提下定义作用于这些元素的新操作
抽象访问者(Visitor):声明多个访问操作,形成所有具体元素必须实现的接口
具体访问(ConcreteVIsitor):实现首次昂访问角色所声明的接口
抽象节点(Element):声明一个接受操作,接受访问者作为参量
public abstract class Child {
public abstract void Accept(Visitor visitor);
}
Usachild类
public class USAchild extends Child{
public void Accept(Visitor visitor) {
visitor.visitUSA(this); }}
Chinachild类
public class Chinachild extends Child{
public void Accept(Visitor visitor) {
visitor.visitChina(this); }}
Vistor类
public abstract class Visitor {
public abstract void visitChina(Chinachild c);
public abstract void visitUSA(USAchild u);}
Weightvistor类
public class WeightVisitor extends Visitor{
public void visitChina(Chinachild c) {
System.out.println("中国孩子体重标准是60kg"); }
public void visitUSA(USAchild u) {
System.out.println("美国孩子体重标准是70kg"); }}
Heightvistor类
public class HeightVisitor extends Visitor{
public void visitChina(Chinachild c) {
System.out.println("中国孩子身高标准是175cm"); }
public void visitUSA(USAchild u) {
System.out.println("美国孩子身高标准是180cm"); }}
ObjectStructure类
public class ObjectStructure {
private ArrayList<Child> list=new ArrayList<Child>();
public void add(Child c){
list.add(c);}
public void remove(Child c){
list.remove(c);}
public void accept(Visitor v){
for(Child c:list){
c.Accept(v); }}}
主类
public class Client {
public static void main(String[] args) {
ObjectStructure o=new ObjectStructure();
o.add(new Chinachild());
o.add(new USAchild());
HeightVisitor h=new HeightVisitor();
WeightVisitor w=new WeightVisitor();
o.accept(h);
o.accept(w); }}