品牌网站源码,深圳做网站优化报价,zencart网站注册是哪个文件,专业做效果图网站16.访问者模式
一.什么是访问者模式 封装一些作用于某种数据结构中的各元素的操作#xff0c;它可以在不改变这个数据结构的前提下#xff0c;定义作用于这些元素的新操作。
二、角色
(1) Vistor#xff08;抽象访问者#xff09;#xff1a;为该对象结构中具体元素角色…16.访问者模式
一.什么是访问者模式 封装一些作用于某种数据结构中的各元素的操作它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。
二、角色
(1) Vistor抽象访问者为该对象结构中具体元素角色声明一个访问操作接口。(2) ConcreteVisitor具体访问者每个具体访问者都实现了Vistor中定义的操作。(3) Element抽象元素定义了一个accept操作以Visitor作为参数。(4) ConcreteElement具体元素实现了Element中的accept()方法调用Vistor的访问方法以便完成对一个元素的操作。(5) ObjectStructure对象结构可以是组合模式也可以是集合能够枚举它包含的元素提供一个接口允许Vistor访问它的元素。
三、代码 1、抽象访问者
public interface Tasker {void visitZhuang(ZhuangHero zhuangHero);void visitZhen(ZhenHero zhenHero);
}2、具体访问者1
public class MyTasker implements Tasker {Overridepublic void visitZhuang(ZhuangHero zhuangHero) {System.out.println(我访问了庄周庄周释放技能);zhuangHero.operate();}Overridepublic void visitZhen(ZhenHero zhenHero) {System.out.println(我访问了甄姬甄姬释放技能);zhenHero.operate();}
}具体访问者2
public class OtherTasker implements Tasker {Overridepublic void visitZhuang(ZhuangHero zhuangHero) {System.out.println(其他人访问庄周庄周开始使出技能);zhuangHero.operate();}Overridepublic void visitZhen(ZhenHero zhenHero) {System.out.println(其他人访问甄姬庄周开始使出技能);zhenHero.operate();}
}3、抽象元素
public abstract class Hero {public abstract void accept(Tasker tasker);
}4、具体元素1
Data
NoArgsConstructor
public class ZhenHero extends Hero {Overridepublic void accept(Tasker tasker) {tasker.visitZhen(this);}public void operate(){System.out.println(甄姬释放出技能);}
}具体元素2
NoArgsConstructor
Data
public class ZhuangHero extends Hero {Overridepublic void accept(Tasker tasker) {tasker.visitZhuang(this);}public void operate(){System.out.println(庄周释放出技能);}
}5.对象结构
public class ObjectStructure {private ListHero heroList new ArrayList();public void handleRequest(Tasker tasker){for (Hero hero : heroList) {hero.accept(tasker);}}public void addHero(Hero hero){heroList.add(hero);}}6.测试类
public class VisitorTest {public static void main(String[] args) {ObjectStructure objectStructure new ObjectStructure();Hero zhuangHero new ZhuangHero();Hero zhenHero new ZhenHero();objectStructure.addHero(zhuangHero);objectStructure.addHero(zhenHero);Tasker myTasker new MyTasker();Tasker otherTasker new OtherTasker();objectStructure.handleRequest(myTasker);objectStructure.handleRequest(otherTasker);}
}