當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,可考慮用到狀態模式
#include "stdafx.h"
#include using namespace std;
class job;
class afternoon_state;
class night_state;
class noon_state;
class state
virtual ~state() {}
virtual void dojob(job* pjob) = 0;
};class job
void set_state(state* pstate)
void do_job()
private:
state* m_pstate;
public:
int m_hour;
};class noon_state : public state
virtual ~noon_state() {}
virtual void dojob(job* pjob);
};class afternoon_state : public state
virtual ~afternoon_state() {}
virtual void dojob(job* pjob);
};class night_state : public state
virtual ~night_state() {}
virtual void dojob(job* pjob);
};job::job()
void noon_state::dojob(job* pjob)
}void night_state::dojob(job* pjob)
}void afternoon_state::dojob(job* pjob)
}int _tmain(int argc, _tchar* argv)
24種設計模式
那我們總結一下模板方法模式 模板方法模式就是在模板方法中按照乙個的規則和順序呼叫基本方法,具體到我們上面那個例子就是run方法按照規定的順序 先呼叫start,然後再呼叫engineboom,再呼叫alarm,最後呼叫stop 呼叫本類的其他方法,並且由isalarm方法的返回值確定run中的執行順...
24種設計模式 策略模式
定義一組演算法,將每個演算法都封裝起來,使它們之間可以互換。策略模式和 模式差別就是策略模式的封裝角色和被封裝的策略類不用是同乙個介面。如果是同乙個介面那就是 模式了。一 趙雲使用三個錦囊 1.妙計介面 public inte ce istrategy2.喬國老開後門 public class ba...
23種設計模式 狀態模式
在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會對物件的操作和狀態轉化之間引入緊耦合?允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改...