我有一些操作...查看,編輯,簽出等。業務邏輯規定如果文檔已經簽出,所有視圖都會變成編輯。一個實例與新實例熱交換
有一個整潔的面向對象的方式做這樣的事情:
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 */
}
更新:你們覺得這是什麼:
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;
}
更好地陳述這個試圖解決的問題。 – 2010-08-10 22:05:39
您可能需要檢查Proxy(http://www.mindspring.com/~mgrand/pattern_synopses.htm#Proxy),Interface,Delegate等一些衆所周知的模式;在嘗試做其他事情之前,滿足您的需求。 – Ismael 2010-08-10 22:08:05
爲什麼不經過存儲所有'Actions'的位置,並用'Edit'替換所有'View'?或者其他的東西。很難弄清楚你在做什麼。 – GManNickG 2010-08-10 22:16:41