手机版
你好,游客 登录 注册
背景:
阅读新闻

Java实现访问者模式-Visitor

[日期:2018-05-29] 来源:Linux社区  作者:noKing [字体: ]

访问者模式-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);
        }
    }
}

结果如下:

本文永久更新链接地址https://www.linuxidc.com/Linux/2018-05/152603.htm

linux
相关资讯       Java访问者模式  Java Visitor 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款