探索Java设计模式:访问者模式
// 定义动物接口及具体动物类
interface Animal {
void accept(AnimalOperation operation);
}
class Lion implements Animal {
@Override
public void accept(AnimalOperation operation) {
operation.visit(this);
}
}
class Tiger implements Animal {
@Override
public void accept(AnimalOperation operation) {
operation.visit(this);
}
}
// 定义访问者接口及具体访问者类
interface AnimalOperation {
void visit(Lion lion);
void visit(Tiger tiger);
}
class FeedVisitor implements AnimalOperation {
@Override
public void visit(Lion lion) {
System.out.println("Feeding lion...");
}
@Override
public void visit(Tiger tiger) {
System.out.println("Feeding tiger...");
}
}
class CleanVisitor implements AnimalOperation {
@Override
public void visit(Lion lion) {
System.out.println("Cleaning lion's enclosure...");
}
@Override
public void visit(Tiger tiger) {
System.out.println("Cleaning tiger's enclosure...");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Animal lion = new Lion();
Animal tiger = new Tiger();
AnimalOperation feedVisitor = new FeedVisitor();
AnimalOperation cleanVisitor = new CleanVisitor();
lion.accept(feedVisitor); // Feeding lion...
tiger.accept(cleanVisitor); // Cleaning tiger's enclosure...
}
}