visitor模式可以分离对象和操作,满足开闭原则。对象的操作都抽象在visitor中,使用了重载方法。
例子
public abstract class Shape {
abstract public void accept(Visitor visitor);
}
public Circle implement Shape {
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
public Rectanglar implement Shape {
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
public interface Visitor {
public void visit(Circle c);
public void visit(Rectanglar r);
}
public Draw implement Visitor {
public void visit(Circle c) {
}
public void visit(Rectanglar r) {
}
}
public class Application {
public static void main(string[] argc) {
List<Shape> shapes = new ArrayList<Shape>();
shapes.add(new Circle());
shapes.add(new Rectanglar());
shapes.foreach(shape -> shape.accept(new Draw());
}
visitor模式将操作以重载的方式封装在visitor对象中,当需要不同的操作的时候,就封装不同的visitor。
小结
visitor模式本身并不难,主要是实现的时候有一定的技巧,在实际的代码中使用也并不多,需要我们多注意发掘。
网友评论