Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface Upgrade {
- // common stuff for all upgrades
- }
- interface UniversalUpgrade {
- // marker interface, could also go with a boolean isUniversal() method in Upgrade
- }
- [abstract] class WeaponUpgrade implements Upgrade {
- // weapon specific stuff
- }
- [abstract] class ArmorUpgrade implements Upgrade {
- // armor specific stuff
- }
- class UpgradeManager {
- private Map<String, Upgrade> upgrades;
- public void registerUpgrade(String id, Upgrade upgrade) {
- upgrades.put(id, upgrade);
- }
- public Collection<UniversalUpgrade> universalUpgrades() {
- return upgrades.values().stream().filter(u -> u instanceof UniversalUpgrade).collect(Collectors.toList());
- }
- // or
- public Collection<Upgrade> universalUpgrades() {
- return upgrades.values().stream().filter(Upgrade::isUniversal).collect(Collectors.toList());
- }
- public Collection<WeaponUpgrade> weaponUpgrades() {
- return upgrades.values().stream().filter(u -> u instanceof WeaponUpgrade).collect(Collectors.toList());
- }
- public Collection<ArmorUpgrade > armorUpgrades() {
- return upgrades.values().stream().filter(u -> u instanceof ArmorUpgrade).collect(Collectors.toList());
- }
- public <U extends Upgrade> upgrades(Class<U> upgradeType) {
- return upgrades.values().stream().filter((u) -> upgradeType.isApplicableFrom(u.getClass())).collect(Collectors.toList());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement