2010-04-29 14 views
2

Dans une base de code héritée, j'ai une très grande classe avec beaucoup trop de champs/responsabilités. Imagine que c'est un objet Pizza.Motif de construction pseudo-verso?

Il a des champs très granulaires comme:

  • hasPepperoni
  • hasSausage
  • hasBellPeppers

Je sais que lorsque ces trois champs sont vraies, nous avons une pizza suprême. Cependant, cette classe n'est pas ouverte pour l'extension ou la modification, donc je ne peux pas ajouter un PizzaType, ou isSupreme(), etc. Les gens dans la base de code dupliquent la même logique if(a && b && c) then isSupreme) partout. Ce problème se pose pour un certain nombre de concepts, donc je cherche un moyen de déconstruire cet objet en plusieurs sous-objets, par ex. un motif de constructeur pseudo-arrière.

PizzaType pizzaType = PizzaUnbuilder.buildPizzaType(Pizza); //PizzaType.SUPREME 

Dough dough = PizzaUnbuilder.buildDough(Pizza); 

Est-ce la bonne approche? Est-ce que ce modèle existe déjà?

+0

Avez-vous déjà eu une réponse satisfaisante, Avid? – Pureferret

Répondre

3

Que diriez-vous du modèle d'adaptateur?

Fondamentalement, une classe d'emballage qui a toutes les fonctionnalités que vous voulez vraiment qui peut aller facilement d'avant en arrière à une classe de pizza.

MenuPizza myPizza = new MenuPizza(pizza); 
PizzaType pizzaType = myPizza.getPizzaType(); 
DoughType doughType = myPizza.getDoughType(); 

Et vous pouvez fournir la fonctionnalité inverse ...

MenuPizza otherPizza = new MenuPizza(PizzaType.SUPREME, DoughType.SOUR); 
Pizza pizzaPOJO = otherPizza.getPizzaPOJO(); 
+0

J'ai aussi une question similaire liée au modèle de principe de responsabilité unique [ici] (http://stackoverflow.com/questions/29742523/how-to-follow-single-responsibility-principle-in-my-httpclient-executor). Si possible, pouvez-vous m'aider là-bas? Toute aide est la bienvenue. – john

0

Je pense que ce serait un grand cas d'utilisation pour les fonctions d'extension, qui n'existent pas en java. Au lieu de cela la solution la plus simple dans mon esprit est de créer une classe et d'ajouter les méthodes qui seraient des extensions dans cette classe d'utilité en tant que méthodes statiques; .