
【例】给宠物喂食
现在养宠物的人特别多,我们就以这个为例,当然宠物还分为狗,猫等,要给宠物喂食的话,主人可以喂,其他人也可以喂食。
访问者角色:给宠物喂食的人
具体访问者角色:主人、其他人
抽象元素角色:动物抽象类
具体元素角色:宠物狗、宠物猫
结构对象角色:主人家

//抽象元素角色类
public interface Animal {
//接受访问者访问的功能
void accept(Person person);
}
//抽象访问者角色类
public interface Person {
void feed(Cat cat);
//喂食宠物狗
void feed(Dog dog);
}
//具体元素角色类(宠物狗)
public class Dog implements Animal{
@Override
public void accept(Person person) {
//访问者给宠物狗喂食
person.feed(this);
System.out.println("汪汪汪 好好吃");
}
}
//具体元素角色类(宠物猫)2
public class Cat implements Animal {
@Override
public void accept(Person person) {
//访问者给宠物mao喂食
person.feed(this);
System.out.println("喵喵喵 好好吃");
}
}
//具体访问者角色类(自己)
public class Owner implements Person {
@Override
public void feed(Cat cat) {
System.out.println("主人喂食猫");
}
@Override
public void feed(Dog dog) {
System.out.println("主人喂食狗");
}
}
//具体访问者角色类(其他人)
public class Someone implements Person {
public void feed(Cat cat) {
System.out.println("其他人喂食猫");
}
public void feed(Dog dog) {
System.out.println("其他人喂食狗");
}
}
//对象结构类
public class Home {
//声明一个集合对象,用来存储元素对象
private List<Animal> nodeList=new ArrayList<>();
//添加元素功能
public void add(Animal animal) {
nodeList.add(animal);
}
public void action(Person person){
//遍历集合,获取每一个元素,让访问者访问每一个元素
for (Animal animal : nodeList) {
animal.accept(person);
}
}
}
public class Client {
public static void main(String[] args) {
//创建Home对象
Home home=new Home();
//添加元素到Home对象中
home.add(new Dog());
home.add(new Cat());
//创建主人对象
//Owner owner=new Owner();
Someone someone=new Someone();
//让主人喂食所有的宠物
home.action(someone);
}
}


双分排
该博客介绍了一个使用访问者模式设计的宠物喂食系统,系统中包括了不同类型的宠物(如狗、猫)和不同角色的喂食者(如主人、其他人)。通过访问者模式,实现了喂食行为的分离,使得喂食操作可以灵活地应用到不同的宠物对象上,增强了系统的可扩展性。

被折叠的 条评论
为什么被折叠?



