您的位置:首页 > 其它

访问者模式

2015-08-05 23:57 218 查看
应用场景:

访问者模式结构:

访问者角色(Visitor): 为该对象结构中具体元素角色声明一个访问操作接口.

具体访问者角色(Concrete Visitor): 实现每个由访问者角色(Visitor)声明的操作.

元素角色(Element): 定义一个Accept操作,它以一个访问者为参数.

具体元素角色(Concrete Element): 实现由元素角色提供的Accept操作.

对象结构角色(Object Structure): 这是使用访问者模式必备的角色. 它要具备以下特征: 能枚举它的元素; 可以提供一个高层的接口以允许该访问者访问它的元素; 可以是一个复合(组合模式)或是一个集合, 如一个列表或一个无序集合.



/**

* 访问的接口

* @author Administrator

*

*/

public interface IVisitor {

void visit(Wheel wheel);

void visit(Engine engine);

void visit(Body body);

void visit(Car car);

}



-------------------------------------------------------------

/**

* 具体的访问者

* @author Administrator

*

*/

public class PrintVisitor implements IVisitor {

@Override

public void visit(Wheel wheel) {

System.out.println("Visiting " + wheel.getName() + " wheel");

}

@Override

public void visit(Engine engine) {

System.out.println("Visiting engine");

}

@Override

public void visit(Body body) {

System.out.println("Visiting body");

}

@Override

public void visit(Car car) {

System.out.println("Visiting car");

}

}



------------------------------------------------------------------------------------------------

/**

* 被访问的对象Body

* @author Administrator

*

*/

public class Body {

public void accept(IVisitor visitor) {

visitor.visit(this);

}

}



--------------------------------------------------------------------

/**

* 被访问的对象Engine

* @author Administrator

*

*/

public class Engine {

public void accept(IVisitor visitor) {

visitor.visit(this);

}

}



--------------------------------------------------------------------------------

/**

* 被访问的对象Wheel

* @author Administrator

*

*/

public class Wheel {

private String name;

public Wheel(String name) {

this.name = name;

}

String getName() {

return this.name;

}

public void accept(IVisitor visitor) {

visitor.visit(this);

}

}



-------------------------------------------------------------------------------------------

/**

* 被访问的对象Car

* @author Administrator

*

*/

public class Car {

private Engine engine = new Engine();

private Body body = new Body();

private Wheel[] wheels

= { new Wheel("front left"), new Wheel("front right"),

new Wheel("back left") , new Wheel("back right") };

public void accept(IVisitor visitor) {

visitor.visit(this);

engine.accept(visitor);

body.accept(visitor) ;

for (int i = 0; i < wheels.length; ++ i)

wheels[i].accept(visitor);

}

}



------------------------------------------------------------------------------------------------

public class Test {

/**

* 测试类 访问小汽车

*/

public static void main(String[] args) {

Car car = new Car();

IVisitor visitor = new PrintVisitor();

car.accept(visitor);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: