Usando un linguaggio OO con tipizzazione statica (come Java), quali sono i modi migliori per rappresentare il seguente modello invariato senza grandi quantità di duplicazione.
Ho due (in realtà più) sapori della stessa struttura. Ogni aroma richiede il proprio (unico per i dati di sapore) su ciascuno degli oggetti all'interno di quella struttura, nonché alcuni dati condivisi. Ma all'interno di ciascuna istanza dell'aggregazione sono consentiti solo gli oggetti di uno (lo stesso) sapore.
FooContainer può contenere FooSources e FooDestinations e associazioni tra gli oggetti "Foo" BarContainer può contenere BarSources e BarDestinations e associazioni tra gli oggetti "Bar"
interface Container()
{
List<? extends Source> sources();
List<? extends Destination> destinations();
List<? extends Associations> associations();
}
interface FooContainer() extends Container
{
List<? extends FooSource> sources();
List<? extends FooDestination> destinations();
List<? extends FooAssociations> associations();
}
interface BarContainer() extends Container
{
List<? extends BarSource> sources();
List<? extends BarDestination> destinations();
List<? extends BarAssociations> associations();
}
interface Source
{
String getSourceDetail1();
}
interface FooSource extends Source
{
String getSourceDetail2();
}
interface BarSource extends Source
{
String getSourceDetail3();
}
interface Destination
{
String getDestinationDetail1();
}
interface FooDestination extends Destination
{
String getDestinationDetail2();
}
interface BarDestination extends Destination
{
String getDestinationDetail3();
}
interface Association
{
Source getSource();
Destination getDestination();
}
interface FooAssociation extends Association
{
FooSource getSource();
FooDestination getDestination();
String getFooAssociationDetail();
}
interface BarAssociation extends Association
{
BarSource getSource();
BarDestination getDestination();
String getBarAssociationDetail();
}