Classi come parametri

0

Vorrei scrivere un'implementazione della struttura dati in Java che utilizzi le cache come parte fondamentale della sua funzionalità e vorrei che l'utente fosse in grado di fornire le proprie implementazioni della cache che implementano una particolare interfaccia cache in modo che possano testare prestazioni utilizzando varie strategie (come LRU, LFU, MRU, ecc.).

Qual è il modo migliore per consentire a un utente di scambiare la propria cache in un'istanza di una delle strutture di dati senza fornire loro l'accesso alla mia base di codici? C'è un modo in cui posso passare in una classe che implementa l'interfaccia cache come parametro?

Questa struttura conterrà forse diverse cache disposte in modi diversi, quindi avrei bisogno di più di una istanza di una cache, e mi piacerebbe essere in grado di creare e distruggere le cache in fase di runtime. Passare un costruttore alla cache come funzione Lambda sarebbe una buona soluzione?

    
posta user129137 15.02.2018 - 06:51
fonte

2 risposte

2

Sulla falsariga della tua idea lambda, il mio suggerimento sarebbe quello di creare un'interfaccia CacheFactory .

public class Whatever
{
  public Whatever(CacheFactory factory)
  {
    cache = factory.build(/* configuration options */);
  }
}

E puoi fare un sacco di cose pazze con quello, se vuoi, come avere i tuoi singleton di ritorno in fabbrica per determinati tipi o strategie di cache.

In alternativa, puoi anche utilizzare generici *

public class Whatever<C extends ICache> {
  private C cache;

  public Whatever() {
    cache = new CacheType();
  }
}

(*) Puoi fare cose simili a questa in C #

    
risposta data 15.02.2018 - 20:39
fonte
6

Potresti definire un'interfaccia Cache che stabilisce un contratto che ti aspetti che la loro implementazione rispetti. Quindi consentire loro di passare poi nella propria implementazione nel costruttore (o metodo setter). cioè.

public class YourDataStructure {
    private final Cache cache;

    public YourDataStructure(Cache instanceOfTheirCacheImplementation) {
        cache = instanceOfTheirCacheImplementation;
    }
}
    
risposta data 15.02.2018 - 07:27
fonte

Leggi altre domande sui tag