Ecco il problema originale. Esistono due classi: Protocollo e, ad esempio, ProtocolUser (che utilizza actully l'istanza della classe Protocol). Ora, ho bisogno di supportare più protocolli, le cui serie di funzioni si intersecano solo parzialmente, facendo cose simili ma non uguali. Ho raggruppato le funzionalità in diverse interfacce. Cioè:
interface IA {}
interface IB {}
interface IC {}
interface IP {};
class P_AB : IP, IA, IB {}
class P_AC : IP, IA, IC {}
class P_BC : IP, IB,IC {}
class P_User
{
IP m_p;
??? // needs to use m_p via IA, IB or IC, depending on which are supported
}
E la parte più contraria: i protocolli devono essere attivati al volo. I metodi di P_User
dovranno scegliere su quali interfacce operare, a seconda di quale sarà supportato dal tempo di chiamata.
Il piano iniziale era affidarsi a is
& as
operatori. Ma sembra sospettosamente ingombrante. L'unica alternativa che vedo è inventare una sorta di infrastruttura "CanDoThis / CanDoThat", ma non differisce molto da un semplice is
.
Ci sono degli schemi utili di cui non sono a conoscenza?