设计模式 访问者模式
定义
案例
定义访问者接口和实现类
public interface Person {
public void feed(Dog dog);
public void feed(Cat cat);
}
public class Owner implements Person{
@Override
public void feed(Dog dog) {
System.out.println("主人喂狗");
}
@Override
public void feed(Cat cat) {
System.out.println("主人喂猫");
}
}
public class SomeOne implements Person{
@Override
public void feed(Dog dog) {
System.out.println("其他人喂狗");
}
@Override
public void feed(Cat cat) {
System.out.println("其他人喂狗");
}
}
定义宠物类
public interface Animal {
void accept(Person person);
}
public class Cat implements Animal{
@Override
public void accept(Person person) {
person.feed(this);
System.out.println("喵喵喵");
}
}
public class Dog implements Animal{
@Override
public void accept(Person person) {
person.feed(this);
System.out.println("汪汪汪");
}
}
定义对象结构
public class Home {
private List nodeList = new ArrayList<>();
public void action(Person person){
for(Animal animal : nodeList){
animal.accept(person);
}
}
public void add(Animal animal){
nodeList.add(animal);
}
}
测试:
public class Client {
public static void main(String[] args) {
Home home = new Home();
home.add(new Dog());
home.add(new Cat());
Owner owner = new Owner();
home.action(owner);
SomeOne someOne = new SomeOne();
home.action(someOne);
}
}
总结