【项目实战】设计模式之访问者模式

一、访问者模式是什么?

访问者模式是一种设计模式
访问者模式是一种行为型设计模式,

访问者模式,可以在不修改集合类的情况下,对集合中的每个元素都执行一些操作。
访问者模式的目的是在不修改对象结构的情况下,对对象进行扩展。
访问者模式可以在不改变聚合对象内元素的前提下,为聚合对象内每个元素提供多种访问方式,即聚合对象内的每个元素都有多个访问者对象。

二、访问者模式的特点与优缺点

访问者模式的主要特点如下:
访问者模式可以在不修改对象结构的情况下,对对象进行扩展。
访问者模式可以让多个访问者同时访问同一个对象,从而实现多态性。
访问者模式可以让访问者对象在访问对象时,自行决定要执行的操作。

访问者模式的主要优点如下:
符合单一职责原则,将数据的存储和操作分别由对象结构类和访问者类实现。
这种算法的优点是:简单易行,效率高,可以解决一些复杂的问题。

访问者模式的主要缺点如下:
依赖倒置,具体元素对访问者可见,违反迪米特原则。

三、访问者模式使用场景

访问者模式通常用于解决一些需要对对象进行遍历或者操作的问题。
对象结构相对稳定,但其操作算法经常变化。
需要对一个对象结构进行多种操作,而对象的组成元素不同。

四、使用访问者模式的例子

下面是一个使用访问者模式的例子:假设我们有一个包含若干个元素的集合,我们想要对这个集合中的每个元素都执行一些操作,例如:增加一个数字、减少一个数字、检查元素是否为偶数等。我们可以使用访问者模式来解决这个问题:

首先,定义一个抽象的访问者接口,该接口包含了访问者对象需要执行的操作。

public interface Visitor {
    
    
    void visit(int element);
}

然后,定义一个具体的访问者类,该类实现了访问者接口,并实现了具体的操作。

public class ConcreteVisitor implements Visitor {
    
    
    @Override
    public void visit(int element) {
    
    
        // 对元素执行操作
    }
}

接着,定义一个集合类,该类包含了若干个元素,并提供了一个方法,可以让访问者对象访问集合中的每个元素。

public class Set {
    
    
    private List<Integer> elements = new ArrayList<>();

    public void add(int element) {
    
    
        elements.add(element);
    }

    public void accept(Visitor visitor) {
    
    
        for (int element : elements) {
    
    
            visitor.visit(element);
        }
    }
}

最后,使用访问者模式来对集合中的每个元素都执行一些操作。

扫描二维码关注公众号,回复: 16212284 查看本文章
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Set set = new Set();
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(4);
        set.add(5);

        ConcreteVisitor concreteVisitor = new ConcreteVisitor();
        set.accept(concreteVisitor);
    }
}

猜你喜欢

转载自blog.csdn.net/wstever/article/details/129913066
今日推荐