package com.example.demo01;
/**
* 访问者
* @author Guardian
*
*/
public interface Visitor {
public void visit(Park park);
public void visit(ParkA parkA);
public void visit(ParkB parkB);
}
package com.example.demo01;
/**
* 清洁工A,负责parkA的卫生情况
* @author Guardian
*
*/
public class VisitorA implements Visitor{
@Override
public void visit(Park park) {
// TODO Auto-generated method stub
}
@Override
public void visit(ParkA parkA) {
System.out.println("清洁工A:完成公园"+parkA.getName()+"的卫生");
}
@Override
public void visit(ParkB parkB) {
// TODO Auto-generated method stub
}
}
package com.example.demo01;
/**
* 清洁工B,负责parkB的卫生情况
* @author Guardian
*
*/
public class VisitorB implements Visitor{
@Override
public void visit(Park park) {
// TODO Auto-generated method stub
}
@Override
public void visit(ParkA parkA) {
}
@Override
public void visit(ParkB parkB) {
System.out.println("清洁工B:完成公园"+parkB.getName()+"的卫生");
}
}
package com.example.demo01;
public class VisitorManager implements Visitor{
@Override
public void visit(Park park) {
System.out.println("管理员:负责公园"+ park.getName() +"卫生检查");
}
@Override
public void visit(ParkA parkA) {
System.out.println("管理员:负责公园"+ parkA.getName() +"卫生检查");
}
@Override
public void visit(ParkB parkB) {
System.out.println("管理员:负责公园"+ parkB.getName() +"卫生检查");
}
}
package com.example.demo01;
/**
* 公园每一部分的抽象
* @author Guardian
*
*/
public interface ParkElement {
//用来接纳访问者
public void accept(Visitor visitor);
}
package com.example.demo01;
/**
* 公园的A部分
* @author Guardian
*
*/
public class ParkA implements ParkElement {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
package com.example.demo01;
/**
* 公园的B部分
* @author Guardian
*
*/
public class ParkB implements ParkElement {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
package com.example.demo01;
public class Park implements ParkElement {
private String name;
private ParkA parkA;
private ParkB parkB;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Park() {
this.parkA = new ParkA();
this.parkB = new ParkB();
parkA.setName("A");
parkB.setName("B");
}
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
parkA.accept(visitor);
parkB.accept(visitor);
}
}
package com.example.demo01;
import org.junit.Test;
public class MainClass {
@Test
public void test01(){
Park park = new Park();
park.setName("越秀公园");
VisitorA visitorA = new VisitorA();
park.accept(visitorA);
VisitorB visitorB = new VisitorB();
park.accept(visitorB);
VisitorManager visitorManager = new VisitorManager();
park.accept(visitorManager);
}
}