大话设计模式——22.访问者模式(Visitor Pattern)
作者:mmseoamin日期:2024-04-27

简介

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

UML图

大话设计模式——22.访问者模式(Visitor Pattern),在这里插入图片描述,第1张

应用场景
  • 适用于数据结构相对稳定且算法易于变化的系统,该模式将数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化
  • 增加新的操作较容易

    示例

    1. Visitor:
    public abstract class Action {
        /**
         * 男人的结论
         *
         * @param man
         */
        public abstract void manConclusion(Man man);
        /**
         * 女人的结论
         *
         * @param woman
         */
        public abstract void womanConclusion(Woman woman);
    }
    
    public class Success extends Action {
        @Override
        public void manConclusion(Man man) {
            System.out.println("背后有个强大的女人!");
        }
        @Override
        public void womanConclusion(Woman woman) {
            System.out.println("个人素质优秀!");
        }
    }
    
    1. Element:
    public abstract class People {
        /**
         * 男女态度
         *
         * @param visitor
         */
        public abstract void accept(Action visitor);
    }
    
    public class Man extends People {
        @Override
        public void accept(Action visitor) {
            visitor.manConclusion(this);
        }
    }
    
    public class Woman extends People {
        @Override
        public void accept(Action visitor) {
            visitor.womanConclusion(this);
        }
    }
    
    1. ObjectStructure:
    public class ObjectStructure {
        private final List peopleList = new ArrayList<>();
        /**
         * 添加
         *
         * @param people
         */
        public void add(People people) {
            peopleList.add(people);
        }
        /**
         * 删除
         *
         * @param people
         */
        public void remove(People people) {
            peopleList.remove(people);
        }
        /**
         * 结果展示
         */
        public void display(Action visitor) {
            for (People p :
                    peopleList) {
                p.accept(visitor);
            }
        }
    }
    
    1. 运行
    public class Main {
        public static void main(String[] args) {
            ObjectStructure objectStructure = new ObjectStructure();
            objectStructure.add(new Woman());
            objectStructure.add(new Man());
            Success success = new Success();
            objectStructure.display(success);
        }
    }
    

    大话设计模式——22.访问者模式(Visitor Pattern),在这里插入图片描述,第2张

    总结