J'ai quelques actions ... Afficher, éditer, vérifier, etc. La logique métier impose que si un document est déjà extrait, toutes les vues se transforment en éditions.une instance hot-swapping lui-même avec une nouvelle instance
est-il un moyen OO propre à faire quelque chose comme ceci:
class Action
{
public:
Document document;
virtual void execute();
};
class View, Edit, Checkout : public Action;
View::execute()
{
if (document.isCheckedOut)
{
delete this;
this = new Edit;
this->execute();
}
/* execute view */
}
mise à jour: ce que vous en pensez de ceci:
class Action
{
public:
static int type;
Document document;
virtual void execute();
static Action* construct(int type, Document document) = 0;
private:
Action();
};
class View, Edit: public Action;
Action* View::construct(Document document)
{
if (document.isCheckedOut)
return new Edit(document);
return new View(document);
}
Action* Edit::construct(Document document)
{
return new Edit(document);
}
void onViewButton(Document document)
{
Action *action = View::construct(document);
action->execute();
delete action;
}
Mieux vaut indiquer le problème que cela tente de résoudre. –
Vous voudrez peut-être vérifier si certains des modèles bien connus comme Proxy (http://www.mindspring.com/~mgrand/pattern_synopses.htm#Proxy), Interface, Delegate; répondre à vos besoins, avant d'essayer de faire autre chose. – Ismael
Pourquoi ne pas passer par où toutes les 'Actions 'sont stockées, et remplacer toutes les' View' par 'Edit'? Ou quelque chose. Il est difficile de comprendre ce que vous faites. – GManNickG