设为首页 加入收藏

TOP

Java实现访问者模式-Visitor
2018-06-04 08:50:49 】 浏览:92
Tags:Java 实现 访问者 模式 -Visitor

访问者模式-Visitor


对于某个对象或者一组对象,不同的访问者,产生的结果不同,执行操作也不同。在这种场景下就可以使用访问者模式了.


对于本文中的一组对象Archer(弓箭手)  Rider(骑兵)  Gunner(火枪手)  这一组对象, 由不同的访问者(AttackVisitor 和 RetreatVisitor)访问, 产生的结果会不同. 一种是进攻, 一种是撤退。


被作用对象


Soldier接口


public interface Soldier {
    void accept(Visitor v);
}


Archer类


public class Archer implements Soldier {
    @Override
    public void accept(Visitor v) {
        v.visit(this);
    }
 
    public String getArcher() {
        return "Archer";
    }
}


Gunner类


public class Gunner implements Soldier {
    @Override
    public void accept(Visitor v) {
        v.visit(this);
    }
 
    public String getGunner() {
        return "Gunner";
    }
}


Rider类


public class Rider implements Soldier {
    @Override
    public void accept(Visitor v) {
        v.visit(this);
    }
 
    public String getRider() {
        return "Rider";
    }
}


访问者


Visitor接口


public interface Visitor {
    void visit(Gunner gunner);
 
    void visit(Rider rider);
 
    void visit(Archer archer);
}


AttackVisitor类


public class AttackVisitor implements Visitor {
    @Override
    public void visit(Gunner gunner) {
        System.out.println(gunner.getGunner() + " 发起进攻");
    }
 
    @Override
    public void visit(Rider rider) {
        System.out.println(rider.getRider() + " 发起进攻");
    }
 
    @Override
    public void visit(Archer archer) {
        System.out.println(archer.getArcher() + " 发起进攻");
    }
}



RetreatVisitor类


public class RetreatVisitor implements Visitor {
    @Override
    public void visit(Gunner gunner) {
        System.out.println(gunner.getGunner() + " 开始撤退");
    }
 
    @Override
    public void visit(Rider rider) {
        System.out.println(rider.getRider() + " 开始撤退");
    }
 
    @Override
    public void visit(Archer archer) {
        System.out.println(archer.getArcher() + " 开始撤退");
    }
}


Main


运行调试


public class Main {
    public static void main(String[] args) {
        Soldier[] list = {new Gunner(), new Rider(), new Archer()};
        RetreatVisitor retreat = new RetreatVisitor();
        AttackVisitor attack = new AttackVisitor();
 
        for (Soldier element : list) {
            element.accept(attack);
        }
 
        System.out.println();
 
        for (Soldier element : list) {
            element.accept(retreat);
        }
    }
}


结果如下:



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java获取服务器基本信息 下一篇深入理解JVM之Java字节码文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目