作者:因情语写
链接:https://www.proprogrammar.com/article/456
声明:请尊重原作者的劳动,如需转载请注明出处
行为型模式又可以分成以下四类:第一类:通过父类与子类的关系进行实现。第二类:两个类之间。第三类:类的状态。第四类:通过中间类
访问者模式属于第四类,通过中间类
分为访问者和被访问者,被访问者接受访问者,访问者就可以操作被访问
package behavior.pattern.intermediator.visitor;
public interface Element {
public void accept(Visitor visitor);
}
package behavior.pattern.intermediator.visitor;
public class ConcreteElementA implements Element {
private String name;
public ConcreteElementA(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visitConcreteElementA(this);
}
}
package behavior.pattern.intermediator.visitor;
public class ConcreteElementB implements Element{
private String name;
public ConcreteElementB(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public void accept(Visitor visitor) {
visitor.visitConcreteElementB(this);
}
}
package behavior.pattern.intermediator.visitor;
public interface Visitor {
public void visitConcreteElementA(ConcreteElementA concreteElementA);
public void visitConcreteElementB(ConcreteElementB concreteElementB);
}
package behavior.pattern.intermediator.visitor;
public class ConcreteVisitor1 implements Visitor {
public void visitConcreteElementA(ConcreteElementA concreteElementA){
System.out.println(concreteElementA.getName());
}
public void visitConcreteElementB(ConcreteElementB concreteElementB){
System.out.println(concreteElementB.getName());
}
}
package behavior.pattern.intermediator.visitor;
public class ConcreteVisitor2 implements Visitor {
@Override
public void visitConcreteElementA(ConcreteElementA concreteElementA) {
System.out.println(concreteElementA.getName());
}
@Override
public void visitConcreteElementB(ConcreteElementB concreteElementB) {
System.out.println(concreteElementB.getName());
}
}
package behavior.pattern.intermediator.visitor;
import java.util.ArrayList;
import java.util.Collection;
public class ObjectStructure {
private Collection<Element> elements;
public ObjectStructure(Collection<Element> elements) {
this.elements = elements;
}
public ObjectStructure() {
elements = new ArrayList<Element>();
}
public void attach(Element element)
{
elements.add(element);
}
public void detach(Element element)
{
elements.remove(element);
}
public void accept(Visitor visitor)
{
for(Element element: elements)
{
element.accept(visitor);
}
}
}
定义了两个访问者和两个被访问者,通过一个中间类ObjectStructure,将两者联系起来
测试代码
package behavior.pattern.intermediator.visitor;
public class Client {
public static void main(String[] args) {
ConcreteElementA elementA = new ConcreteElementA("ElementA");
ConcreteElementB elementB = new ConcreteElementB("ElementB");
ConcreteElementB elementA2 = new ConcreteElementB("ElementA2");
ConcreteVisitor1 visitor1 = new ConcreteVisitor1();
ConcreteVisitor2 visitor2 = new ConcreteVisitor2();
ObjectStructure os = new ObjectStructure();
os.attach(elementA);
os.attach(elementA2);
os.attach(elementB);
os.detach(elementA2);
os.accept(visitor1);
System.out.println("-------------------------------------------");
os.accept(visitor2);
}
}
运行结果
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202206 | 4 |
202205 | 2 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论