如何避免大型的if语句和instanceof

如何避免大型的if语句和instanceof,第1张

如何避免大型的if语句和instanceof

避免

instanceof
在基类中(不 使用 诸如
performAction
or
的非描述性名称
doWhatYouAreSupposedToDo
)发明任何新的人工方法的一种优雅方法是 使用
访问者模式
。这是一个例子:

动物

import java.util.*;abstract class Animal {    String name;    public Animal(String name) {        this.name = name;    }    public abstract void accept(AnimalVisitor av);  // <-- Open up for visitors.}

狮子鹿

class Lion extends Animal {    public Lion(String name) {        super(name);    }    public void roar() {        System.out.println("Roar");    }    public void accept(AnimalVisitor av) {        av.visit(this);      // <-- Accept and call visit.    }}class Deer extends Animal {    public Deer(String name) {        super(name);    }    public void runAway() {        System.out.println("Running...");    }    public void accept(AnimalVisitor av) {        av.visit(this);      // <-- Accept and call visit.    }}

游客

interface AnimalVisitor {    void visit(Lion l);    void visit(Deer d);}class ActionVisitor implements AnimalVisitor {    public void visit(Deer d) {        d.runAway();    }    public void visit(Lion l) {        l.roar();    }}

测试动物

public class TestAnimals {    public static void main(String[] args) {        Animal lion = new Lion("Geo");        Animal deer1 = new Deer("D1");        Animal deer2 = new Deer("D2");        List<Animal> li = new ArrayList<Animal>();        li.add(lion);        li.add(deer1);        li.add(deer2);        for (Animal a : li) a.accept(new ActionVisitor());         // <-- Accept / visit.    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5176969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存