设计模式之访问者模式


main
===================================================================================
package com.visitor.sym;

public class TestVisitor {

/**
* @param args
* 抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。
* 访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。
* 抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。
* 元素类:实现抽象元素类所声明的accept方法,通常都是visitor.visit(this),基本上已经形成一种定式了。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
VisitorI visitor = new Visitor();
ConcreteElement1 concreteElement1 = new ConcreteElement1();
concreteElement1.accept(visitor);
ConcreteElement2 concreteElement2 = new ConcreteElement2();
concreteElement2.accept(visitor);
}

}
访问者接口
================================================================================
package com.visitor.sym;

public interface VisitorI {
void visit(ConcreteElement1 concreteElement1);

void visit(ConcreteElement2 concreteElement2);
}
具体访问者
================================================================================
package com.visitor.sym;

public class Visitor implements VisitorI {

@Override
public void visit(ConcreteElement1 concreteElement1) {
// TODO Auto-generated method stub
concreteElement1.doSomething();
}

@Override
public void visit(ConcreteElement2 concreteElement2) {
// TODO Auto-generated method stub
concreteElement2.doSomething();
}

}
元素接口
=================================================================================
package com.visitor.sym;

public interface Element {
void accept(VisitorI visitor);

void doSomething();
}
元素一:
=================================================================================
package com.visitor.sym;

public class ConcreteElement1 implements Element {

@Override
public void accept(VisitorI visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}

@Override
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("这是第一个元素");
}

}
元素二:
================================================================================
package com.visitor.sym;

public class ConcreteElement2 implements Element {

@Override
public void accept(VisitorI visitor) {
// TODO Auto-generated method stub
visitor.visit(this);
}

@Override
public void doSomething() {
// TODO Auto-generated method stub
System.out.println("这是第二个元素");
}

}
/*打印结果:这是第一个元素
这是第二个元素*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值