donné une feuille, et son TD mère, faire une copie:Solution sur une feuille divise à deux avec des parents différents?
$parent = new Node('td');
$child = new Leaf('Text:', 'Value');
$parent->add($child);
$parent->print();
exigence d'impression:
sometimes <td>Text: Value</td>
sometimes <td>Text:</td><td>Value</td>
Jusqu'à présent, je construit 3 solutions, mais aucun ne me satisfait, je me demande que l'on est plus OO? Et y a-t-il un 4ème choix?
-- Solution 1 --
// Divide the leaf object to two leaf objects
$leafText = new Leaf('Text: ');
$leafvalue = new Leaf('Value');
$parent->add($leafText);
$parent->add($leafValue);
$parent->print();
-- Solution 2 --
// Change leaf print() logic, if leaf's parent is TD, output "Text: Value",
// otherwise output "<td>Text:</td><td>Value</td>"
-- Solution 3 --
// Change parent add() logic, give leaf a variable $separate to describe if it
// should be divided
function add($child) {
if($child->separate) {
$this->parent->add($child->text);
$this->children[] = $child->value;
}
...
}
description utile, je ' J'essaie de comprendre. J'ai déjà pensé à ajouter un contrôleur, et même pensé à supprimer TD de la hiérarchie. Jusqu'à présent, je suis toujours à la recherche d'un élégant, ou propre dans vos mots, façon de résoudre ce problème – Edward
Très bien, votre réponse aide à faire le problème clair. Cos en utilisant le modèle Composite, chaque nœud/feuille sait déjà comment s'imprimer et traiter l'impression elle-même. Mais pour répondre à l'exigence en question, noeud/feuille ne peut plus être conservé seul, en 2ème solution, feuille doit savoir info parent; dans la 3ème solution, le parent doit savoir l'information de l'enfant; les deux introduisent une dépendance supplémentaire. Maintenant je sais pourquoi aucune solution ne me rend confortable. Ajouter un contrôleur ne semble pas d'aide, vraiment un mal de cerveau – Edward