package com.ding.shejimoshi.Visitor;
abstract class Visitor {
public abstract void visitConcreteElementA(ConcreteElementA concreteElementA);
public abstract void visitConcreteElementB(ConcreteElementB concreteElementB);
}
package com.ding.shejimoshi.Visitor;
public class ConcreteVisitor1 extends Visitor{
public void visitConcreteElementA(ConcreteElementA concreteElementA){
System.out.println(concreteElementA.getClass()+"被"+this.getClass()+"访问");
}
public void visitConcreteElementB(ConcreteElementB concreteElementB){
System.out.println(concreteElementB.getClass()+"被"+this.getClass()+"访问");
}
}
package com.ding.shejimoshi.Visitor;
public class ConcreteVisitor2 extends Visitor{
public void visitConcreteElementA(ConcreteElementA concreteElementA){
System.out.println(concreteElementA.getClass()+"被"+this.getClass()+"访问");
}
public void visitConcreteElementB(ConcreteElementB concreteElementB){
System.out.println(concreteElementB.getClass()+"被"+this.getClass()+"访问");
}
}
package com.ding.shejimoshi.Visitor;
abstract class Element {
public abstract void accept(Visitor visitor);
}
package com.ding.shejimoshi.Visitor;
public class ConcreteElementA extends Element{
public void accept(Visitor visitor){
visitor.visitConcreteElementA(this);
}
}
package com.ding.shejimoshi.Visitor;
public class ConcreteElementB extends Element{
public void accept(Visitor visitor){
visitor.visitConcreteElementB(this);
}
}
package com.ding.shejimoshi.Visitor;
import java.util.ArrayList;
import java.util.List;
public class ObjectStructure {
private List<Element> elements=new ArrayList<Element>();
public void attace(Element element){
elements.add(element);
}
public void detach(Element element){
elements.remove(element);
}
public void accept(Visitor visitor){
for(Element s :elements){
s.accept(visitor);
}
}
}
package com.ding.shejimoshi.Visitor;
public class Main {
public static void main(String [] args){
ObjectStructure o=new ObjectStructure();
o.attace(new ConcreteElementA());
o.attace(new ConcreteElementB());
ConcreteVisitor1 v1=new ConcreteVisitor1();
ConcreteVisitor2 v2=new ConcreteVisitor2();
o.accept(v1);
o.accept(v2);
}
}
----------------------------------------------------------------------------------------------------
class com.ding.shejimoshi.Visitor.ConcreteElementA被class com.ding.shejimoshi.Visitor.ConcreteVisitor1访问
class com.ding.shejimoshi.Visitor.ConcreteElementB被class com.ding.shejimoshi.Visitor.ConcreteVisitor1访问
class com.ding.shejimoshi.Visitor.ConcreteElementA被class com.ding.shejimoshi.Visitor.ConcreteVisitor2访问
class com.ding.shejimoshi.Visitor.ConcreteElementB被class com.ding.shejimoshi.Visitor.ConcreteVisitor2访问
-------------------------------------------------------------------------------------------------------
访问者模式 优点 数据结构和算法分开
缺点 不要增加新的数据结构
-----------------------------------------------------------------------------------------------------------
private List<Element> elements=new ArrayList<Element>();
类的集合
分享到:
相关推荐
很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。 访问者模式的优点就是增加新的...
很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。反之,如果这样的系统的数据结构...
调停者模式将对象的行为和协作抽象化,把 对象在小尺度的行 为上与其他对象的相互作用分开处理。 18、MEMENTO —同时跟几个 MM 聊天时,一定要记清楚刚才跟 MM 说了些什么话,不然 、 MM 发现了会不高兴的哦,...
* Visitor(访问者)模式:访问者在进行访问时,完成一系列实质性操作,而且还可以扩展。 设计模式是 software 设计中的一种解决方案,可以帮助开发者更好地设计和实现软件系统。理解和应用设计模式,可以提高开发...
设计模式之 Visitor(访问者) 访问者在进行访问时,完成一系列实质性操作,而且还可以扩展. 设计模式引言 设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将...
- **缺点**:可能会导致结构类与访问者类之间的紧密耦合。 - **Chain of Responsibility模式**:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 - **应用场景**:当一个请求需要经过...
#### 十九、访问者模式(Visitor Pattern) **定义**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 **应用场景**: - 一个对象结构包含很多类...