zoukankan      html  css  js  c++  java
  • 访问者模式

    1.访问者模式简介

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问
    者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

    关键代码:在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。

    应用实例:老师家访,父亲Tom接待。

    2.示例Demo

    interface FamilyMember {
        void accept(Visitor visitor);
    }
    
    class Wife implements FamilyMember {
        public void accept(Visitor visitor) {
            visitor.sayHello(this);
        }
    }
    
    class Daughter implements FamilyMember {
        public void accept(Visitor visitor) {
            visitor.sayHello(this);
        }
    }
    
    class Son implements FamilyMember {
        public void accept(Visitor visitor) {
            visitor.sayHello(this);
        }
    }
    
    
    class Reception implements FamilyMember {
        private String name;
        private FamilyMember members[];
        public Reception(String name) {
            this.name = name;
            members = new FamilyMember[] {new Wife(), new Daughter(), new Son()}; //Attention here
        }
    
        public String getName() {
            return name;
        }
    
        public void accept(Visitor visitor) {
            visitor.sayHello(this);
            for (FamilyMember member : members) {
                member.accept(visitor);
            }
        }
    }
    
    /*对每一个家庭成员的访问方法可能由于访问者的不同而不同*/
    interface Visitor {
        void sayHello(Reception reception);
        void sayHello(Wife wife);
        void sayHello(Daughter daughter);
        void sayHello(Son son);
    }
    
    
    class Teacher implements Visitor {
        private String receptionName;
    
        public void sayHello(Reception reception) {
            receptionName = reception.getName();
            System.out.println("Hello " + receptionName);
        }
        public void sayHello(Wife wife) {
            System.out.println("Hello " + receptionName + "'s wife");
        }
        public void sayHello(Daughter daughter) {
            System.out.println("Hello " + receptionName + "'s daughter");
        }
        public void sayHello(Son son) {
            System.out.println("Hello " + receptionName + "'s son");
        }
    }
    
    
    public class VisitorPatternDemo {
        public static void main(String args[]) {
            Visitor visitor = new Teacher();
            FamilyMember reception = new Reception("Tom");
            reception.accept(visitor);
        }
    }
    
    /*
    # java VisitorPatternDemo
    Hello Tom
    Hello Tom's wife
    Hello Tom's daughter
    Hello Tom's son
    */

    参考:http://www.runoob.com/design-pattern/visitor-pattern.html

  • 相关阅读:
    java中的数组
    java中的break continue
    java 自加和短路问题 几个例子
    循环语句
    K-近邻算法小结
    数据结构与算法学习笔记 (三) 排序 搜索
    数据结构与算法学习笔记 (二) 栈 链表 队列 树 堆 图 并查集
    Spark数据分析技术学习笔记(一)——基础概念、RDD使用
    Python数据分析学习笔记
    Python机器学习(Sebastian著 ) 学习笔记——第六章模型评估与参数调优实战(Windows Spyder Python 3.6)
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10742906.html
Copyright © 2011-2022 走看看