比使用大量吸气剂更好的方法/设计

尼基尔·库里阿科斯(Nikhil Kuriakose)

假设我有一堂课,里面存储着武器库

public class Arsenal{

  List<RocketLauncher> rocketLaunchers;
  List<HandGrenade> handGrenades;
  List<LandMine> landMines;
  //Followed by a few more weapons

}

武器是枚举的一部分,武器

现在,我试图显示摘要屏幕或在其他地方报告,并且正在准备地图。请参见下面的代码段。我已经展示了两种方法

public Map<Weapon,Integer> generateReport(Arsenal arsenal){

 Map<Weapon,Integer> weaponCountMap = //suitable map impl

 //Technique 1
 //Create and use a larger num of getters from the Arsenal Class
 weaponCountMap.put(Weapon.HAND_GRENADE, arsenal.getHandGrenades);
 //.. and so on

 //Technique 2
 //Create a single method in Arsenal which returns a Map
 weaponCountMap = arsenal.getSummary();

 return weaponCountMap;
}

问:难道只是我还是大家都感觉“不正确”使用了大量的干将。假设阿森纳可以储存约50种武器,就像该课程中的50种方法一样。与二传手一起加倍。

还。使用第二种方法(没有访问器方法)时,我感觉不太灵活。

你们能否请您认真评估这两种方法并可能提出新的方法?

特卡西

不对您的武器类型进行硬编码Arsenal怎么办?以下是针对您的特定情况异构 容器的简单实现但是,由于我对枚举中的泛型不太熟悉,因此需要在拥有Weapon子类及其子类(例如)的情况下执行此实现HardGrenade extends Weapon

public class Arsenal{
    private Map<Class<?>, Collection<?>> weaponArsenal;

    public <T extends Weapon> Collection<T> get(Class<T> weaponClass) {
        if (weaponArsenal.containsKey(weaponClass) {
            return (Collection<T>) weaponArsenal.get(weaponClass);
        }
        return new ArrayList<T>(); // to avoid checking null everytime in client code
    }

    public <T extends Weapon> void put(T weapon) {
        if (!weaponArsenal.containsKey(weapon.class)) {
            Collection<T> weaponList = // initialize correct collection here
            weaponArsenal.put(weapon.class, weaponList);
        }

        weaponArsenal.get(weapon.class).add(weapon);
    }
}

并在客户端代码中

Arsenal arsenal = new Arsenal();

arsenal.put(new HandGrenade());
arsenal.put(new RocketLauncher());

Collection<HandGrenade> handGrenades = arsenal.get(HandGrenade.class);
Collection<RocketLauncher> rocketLaunchers = arsenal.get(RocketLauncher.class);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用多种吸气剂方法的简洁打印方式-Java

来自分类Dev

吸气剂方法无法在增强循环中使用

来自分类Dev

吸气剂背后的封装方法

来自分类Dev

从声纳方法计数中排除吸气剂和吸气剂

来自分类Dev

快速正确使用吸气剂和吸气剂

来自分类Dev

在球拍中使用吸气剂和吸气剂实现封闭

来自分类Dev

如何像目标C一样快速地编写吸气剂方法,并且有更好的方法

来自分类Dev

更好地更改父母的领域或覆盖吸气剂?

来自分类Dev

nil快速检查内部的吸气剂方法?

来自分类Dev

找不到预期的吸气剂方法

来自分类Dev

如何使用可为空的吸气剂?

来自分类Dev

在Vuex吸气剂中使用组件道具的正确方法是什么?

来自分类Dev

Dart Polymer 1.0行为-找不到方法,需要使用吸气剂

来自分类Dev

在另一种方法中使用吸气剂将行不通吗?

来自分类Dev

在Vuex吸气剂中使用组件道具的正确方法是什么?

来自分类Dev

为什么在骨干模型中使用吸气剂和吸气剂?

来自分类Dev

向原型添加吸气剂/吸气剂

来自分类Dev

Objective-C无吸气剂方法错误

来自分类Dev

是否可以将方法链接到吸气剂?

来自分类Dev

鱿鱼的规则“ undocumentedapi”不排除某些吸气剂方法

来自分类Dev

了解吸气剂方法和实例变量

来自分类Dev

引用代替吸气剂?

来自分类Dev

飞镖:@observable的吸气剂

来自分类Dev

Spritekit上的吸气剂

来自分类Dev

吸气剂返回null

来自分类Dev

我应该始终对吸气剂使用noexcept吗?

来自分类Dev

使用Dart中的反射从ClassMirror获取吸气剂和/或属性?

来自分类Dev

是否需要在ORM组件中使用吸气剂功能?

来自分类Dev

如何禁止使用吸气剂修改对象属性

Related 相关文章

热门标签

归档