Supponiamo di avere una classe astratta che ha diverse classi concrete che le interfacce pubblicano un'informazione sotto diverse forme equivalenti, con la differenza che ogni classe ha una forma preferita che può essere consultati a costo zero consultando gli altri potrebbe richiedere a calcolo che richiede tempo. Come implementare una strategia selezionando un algoritmo basato su questa "affinità" di una classe per una informazione formare?
Esempio
L'esempio originale è un esempio complicato di molto specializzato campo, quindi farò del mio meglio per capire un esempio che sarà familiare alla maggior parte dei programmatori.
Supponiamo di avere una classe astratta che rappresenta i dispositivi I / O che ha due sottoclassi concrete, una per i dispositivi basati su char e una per dispositivi basati su blocchi. Ogni classe fornisce accesso basato su blocchi e accesso basato su cahr, ma ogni classe ha affinità con uno di questi metodi: l'accesso basato su blocchi è preferito per i dispositivi basati su blocchi, ecc. Diciamo, vogliamo implementare una procedura di copia, in modo che, se la fonte e i dispositivi di destinazione sono basati su blocchi, quindi viene eseguita la copia blocco per blocco, in tutti gli altri casi è un approccio char-by-char preferito.
Discussione
Supponiamo ora di avere non solo dispositivi I / O, ma diverse classi astratte offre accesso a diversi metodi logicamente equivalenti, ma di chi l'implementazione differisce notevolmente per la precisione, mostrando quindi una maggiore affinità con un metodo rispetto agli altri.
Vogliamo implementare una strategia lavorando su un insieme di tali classi e selezionando un algoritmo prendendo le affinità di questi classi in considerazione.
A causa della complessità combinatoria portata dall'aggregato, il il modello di visitatore non sembra utile qui.
Domanda
Come ogni classe concreta può esporre la propria affinità con l'una o l'altra metodo di accesso in un modo che è utile per un prelievo di componenti strategici un algoritmo adatto a queste affinità? La combinatoria produce a un gran numero di combinazioni di affinità e la strategia ha solo bisogno considerare alcuni "casi fortunati" e utilizzare un algoritmo generico da gestire la stragrande maggioranza delle combinazioni.