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

  • 相关阅读:
    李彦宏:创业成功五招即可
    JS无聊之作——换肤切换样式
    从3个科技公司里学到的57条经验(转载)
    早该知道的7个JavaScript技巧
    ASP.NET Cookie 概述
    曝光SEO高手藏在内心的SEO秘籍
    18种最实用的网站推广方法大全
    javascript的IE和Firefox兼容性问题
    增加反向链接的35个技巧
    常用JS片段
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10742906.html
Copyright © 2011-2022 走看看