Je commence à implémenter le modèle de commande dans l'espoir d'obtenir une solution utile à mon problème de fournir une opération d'annulation. Maintenant, je suis confronté à un certain problème:Implémentation d'annulation en Java pour les changements d'état
L'exécution d'annulation lorsque les opérations sont impliquées est plutôt facile: quand j'ai ajouté 5 à un nombre, alors je soustrais 5. Quand j'ai ajouté un objet à une liste, alors je retire ça, et ainsi de suite. Mais que faire si j'ai un état total et pas quelque chose comme une liste?
Un exemple: je modélise des informations sur un fil dans une classe:
public class ThreadInfo implements Comparable<ThreadInfo> {
final int id;
String name;
int priority;
String state;
int waitCount;
// ...
}
Certaines informations ne change pas, par exemple l'id. Il est facile de défaire le waitCount
comme décrit ci-dessus, il suffit de le soustraire. Mais qu'en est-il priority
ou state
? Il n'est pas clair comment annuler ces informations.
La seule idée je suis venu avec: lors de l'initialisation de l'objet de commande, préserver l'ancien état dans elle est l'objet: en faisant passer les données pertinentes dans le constructeur:
public MyCommand(int priority, String state) {
previousPriority = priority;
previousState = state;
}
Ou serait-il préférable de laisser ThreadInfo
avoir une liste d'états et de priorités en étant les premiers éléments du courant?
Ou détenez une Collection sur une pile. –
@Hovercraft C'était la deuxième approche à laquelle je pensais! –
@platzhirsch: Tout dépend du nombre de niveaux d'annulation que vous désirez. –