栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何避免大型的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.    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449740.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号