编程-设计模式 24:访问者模式

设计模式 24:访问者模式

定义与目的
  • 定义:访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  • 目的:该模式的主要目的是分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。
实现示例

假设我们有一个图形编辑器,需要支持不同的图形类型和操作。我们可以使用访问者模式来实现这个需求。

// 抽象元素
interface Shape {
    void accept(Visitor visitor);
}

// 具体元素 - 圆形
class Circle implements Shape {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

// 具体元素 - 矩形
class Rectangle implements Shape {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

// 抽象访问者
interface Visitor {
    void visit(Circle circle);
    void visit(Rectangle rectangle);
}

// 具体访问者 - 绘制访问者
class DrawVisitor implements Visitor {
    @Override
    public void visit(Circle circle) {
        System.out.println("Drawing circle...");
    }

    @Override
    public void visit(Rectangle rectangle) {
        System.out.println("Drawing rectangle...");
    }
}

// 具体访问者 - 打印访问者
class PrintVisitor implements Visitor {
    @Override
    public void visit(Circle circle) {
        System.out.println("Printing circle information...");
    }

    @Override
    public void visit(Rectangle rectangle) {
        System.out.println("Printing rectangle information...");
    }
}

// 对象结构
class ShapeCollection {
    private List<Shape> shapes = new ArrayList<>();

    public void addShape(Shape shape) {
        shapes.add(shape);
    }

    public void accept(Visitor visitor) {
        for (Shape shape : shapes) {
            shape.accept(visitor);
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ShapeCollection collection = new ShapeCollection();
        collection.addShape(new Circle());
        collection.addShape(new Rectangle());

        Visitor drawVisitor = new DrawVisitor();
        collection.accept(drawVisitor);

        Visitor printVisitor = new PrintVisitor();
        collection.accept(printVisitor);
    }
}
使用场景
  • 当你需要在不改变对象结构中的元素类的前提下定义新的操作时。
  • 当一个对象结构包含多种类型的元素,你想对这些元素执行不同的操作时。
  • 当你需要在对象结构上定义多个操作,并且这些操作都与这些对象有关时。

访问者模式通过分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。这对于需要在不改变对象结构中的元素类的前提下定义新的操作的场景非常有用。

小结

访问者模式是一种常用的行为型模式,它可以帮助你分离算法与对象结构,使得可以独立地改变对象结构和作用于这些对象上的操作。这对于需要在不改变对象结构中的元素类的前提下定义新的操作的场景非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值