Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Polimorfismo

  1. #1

    Polimorfismo

    Buon giorno a tutti, avrei un quesito riguardo la programmazione ad oggetti. O un oggetto "Player" che prevede un metodo "acquisisciBonus()". Tale metodo riceve in ingresso diversi tipi di bonus e a seconda di quelli che riceve deve andare a modificare lo stato di Player variandone i parametri. Quello che vorrei è che il metodo acquisisciBonus riconoscesse il tipo di bonus passato e variasse di conseguenza lo stato di Player in modi diversi a seconda del tipo di Bonus. Vorrei evitare tuttavia di utilizzare strutture condizionali if con istanceOf, in modo che se un domani verrà aggiunto un nuovo bonus il codice del metodo acquisisciBonus non dovrà essere modificato.

    Vi ringrazio

    Francesco

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,028
    Ciao e benvenuto, stiamo parlando di javascript giusto?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Ciao e benvenuto, stiamo parlando di javascript giusto?
    e no, semplicemente Java,,,

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,028
    Quote Originariamente inviata da francescolomba Visualizza il messaggio
    e no, semplicemente Java,,,
    Mi sembrava, ho segnalato la discussione attendi il trasferimento nel forum corretto
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,840
    Potresti crearti un'interfaccia che esponga il metodo di calcolo del bonus:


    codice:
    public interface PlayerBonus {
        void doBonus(Player player);
    }

    In base ai bonus che vuoi assegnare crearai la corrispondente specializzazione:


    codice:
    public class MoneyBonus implements PlayerBonus<Money> {
        private final Money money;
        
        public MoneyBonus(Money money) { this.money = money;  }  
        
        @Override
        public void doBonus(Player player) {
            player.setMoney(money);
        }
    }
    
    
    public class StuffBonus implements PlayerBonus {
        private final Something something;
        
        public StuffBonus(Something something) { this.something = something;  }
        
        @Override
        public void doBonus(Player player) {
            player.setStuff(something);
        }
    }



    L'utilizzo sarà una cosa del genere:


    codice:
    public class Player {
        ...
        
        public void acquisisciBonus(List<Bonus> bonusList) {
            for (Bonus bonus : bonusList ) {
                bonus.doBonus(this);
            }
        }
    }
    
    
    public class Main {
        public static void main(String[] args) {
            List<Bonus> bonusList = new ArrayList();
            bonusList.add(new MoneyBonus(new Money(100, "€")));
            bonusList.add(new StuffBonus(new Something("funny stuff")));
     
            Player player = ...
            player.acquisciBonus(bonusList);
        }
    }

    Che dici?
    Ultima modifica di Alex'87; 18-05-2016 a 12:56

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.