2014-06-27 3 views
0

J'ai hérité du code où un modèle de décorateur est utilisé pour extraire des données de plusieurs sources de données. Le flux du code est un DataGetter initial est créé et d'autres DataGetters l'encapsulent pour récupérer plus de données à partir d'autres sources. Il ressemble un peu à ceci:Mieux concevoir pour l'extraction de données multiples

DataGetterA getterA = new DataGetterA(); 
DataGetterB getterB = new DataGetterB(getterA); 
DataGetterC getterC = new DataGetterC(getterB); 
Map data = getterC.getData(); 

Chaque DataGetter récupère des données à partir d'une autre table et combine les données dans un Map.

Je me demandais s'il y avait un meilleur design pour ça?

+0

Je pense que ce lien peut vous aider: http://stackoverflow.com/questions/7707363/an-alternative-for-the-decorator-pattern-in-java –

Répondre

0
  1. Vous définissez une interface pour charger des données dans une carte.

    interface publique DataLoader {

    void loadData(Map map); 
    

    }

  2. Mettre en oeuvre l'interface pour les différentes sources de données

    A_DataLoader

    public class implémente DataLoader {

    public void loadData(java.util.Map map) { 
        // Load data from data source A into the Map 
    } 
    

    }

    B_DataLoader public class implémente DataLoader {

    public void loadData(java.util.Map map) { 
        // Load data from data source B into the Map 
    } 
    

    }

    C_DataLoader public class implémente DataLoader {

    public void loadData(java.util.Map map) { 
        // Load data from data source C into the Map 
    } 
    

    }

  3. Charger des données

    public static void main (String [] args) {

    Map map = new HashMap(); 
    
    // Load data from data source A 
    DataLoader loader = new A_DataLoader(); 
    loader.loadData(map); 
    
    // Load data from data source B 
    loader = new B_DataLoader(); 
    loader.loadData(map); 
    
    // Load data from data source C 
    loader = new C_DataLoader(); 
    loader.loadData(map); 
    

    }

  4. Vous pouvez avoir votre XML/configuration de base de données pour définir la liste de mise en œuvre DataLoader utilisée. Si vous utilisez un conteneur IoC tel que Spring IoC ou CDI. Il est facile d'obtenir toutes les instances de l'implémentation de DataLoader.

0

Vous pouvez utiliser un modèle de composition. Créez un CompositeDataGetter qui reçoit une liste de DataGetters et passez en revue les agglutiner les cartes.

Questions connexes