270
社区成员
发帖
与我相关
我的任务
分享
Main,Adveturer,Bottle,Equipment类Main里面实现,此时Main只有45行Spell类,并创建HealSpell、AttackSpell子类HpBottle、AtkBottle、DefBottle、ManaBottleboolean isTake,这样非常方便,删除物品时只需要删一次。Main爆行数了,于是把各个操作都分出来了各自的类,调用时传参数Scanner in和ArrayList<Adventurer> adventurers,现在看起来很鸡肋()ArrayList里面遍历找某个id的物品很麻烦,于是写了一个静态方法find,每次只需要给find传参数ArrayList<T> a,String id和Function<T,String> getId就能返回查找到的对象。use和输出类型我选择在各个子类中具体操作,好处是调用的时候不需要再分类别。Equipment类的子类Armour和Weapon类,并创建Weapon类的子类Sword和Magicbook类Bottle要记录放入顺序,放弃 isTake的写法,改成LinkedList<Bottle> takeBottlesSolver类,并把每个操作写成方法,好处是管理方便,也不需要传参。HashMap,舍弃ArrayList,使用了HashMap,方法find也删去了。这里的fight和bi操作我都在Adventurer中实现了,并没有外包工厂或者接口。Adventurer类中加Adventurer father和ArrayList<Adventurer> sons来表示直接的雇主和雇员,这样每个Adventurer都是树中的一个节点,寻找上下级也很方便,我并未模仿OO那篇推送中的接口示例,因为我觉得没有很明显的优点,作为雇员和雇主的只有Adventurer一种类,接口比较适合多样化的类别管理。Adventurer中实现Solver类中写了个迭代方法relate,具体操作为,给每个relate方法传Adventurer father和String input(如果没有father则传null),然后在input中找到开头的人名b,将其和father绑定父子关系,并把人名后面的括号里面的内容(如果有括号的话),按照逗号一一分割传给下一个relate(下一个relate的father就是b)。Adventurer中,没有任何接口和工厂,我的Adventurer类也一共只有400行