【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
策略模式就是用統一的方法介面分別對不同類型的資料進行訪問。比如說,現在我們想用pc看一部電影,此時應該怎麼做呢?看電影嘛,當然需要各種播放電影的方法。rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。可是事實上,我們完全可以不去管是什麼檔案格式。因為播放器對所有的操作進行了抽象,不同的檔案會自動調用相應的存取方法。
[cpp] view plaincopyprint?
- typedef struct _MoviePlay
- {
- struct _CommMoviePlay* pCommMoviePlay;
-
- }MoviePlay;
-
- typedef struct _CommMoviePlay
- {
- HANDLE hFile;
- void (*play)(HANDLE hFile);
-
- }CommMoviePlay;
typedef struct _MoviePlay<br />{<br /> struct _CommMoviePlay* pCommMoviePlay;</p><p>}MoviePlay;</p><p>typedef struct _CommMoviePlay<br />{<br /> HANDLE hFile;<br /> void (*play)(HANDLE hFile);</p><p>}CommMoviePlay; 這個時候呢,對於使用者來說,統一的檔案介面就是MoviePlay。接下來的一個工作,就是編寫一個統一的提供者。
[cpp] view plaincopyprint?
- void play_movie_file(struct MoviePlay* pMoviePlay)
- {
- CommMoviePlay* pCommMoviePlay;
- assert(NULL != pMoviePlay);
-
- pCommMoviePlay = pMoviePlay->pCommMoviePlay;
- pCommMoviePlay->play(pCommMoviePlay->hFile);
- }
void play_movie_file(struct MoviePlay* pMoviePlay)<br />{<br /> CommMoviePlay* pCommMoviePlay;<br /> assert(NULL != pMoviePlay);</p><p> pCommMoviePlay = pMoviePlay->pCommMoviePlay;<br /> pCommMoviePlay->play(pCommMoviePlay->hFile);<br />}<br /> 最後的工作就是對不同的hFile進行play的實際操作,寫簡單一點就是,
[cpp] view plaincopyprint?
- void play_avi_file(HANDLE hFile)
- {
- printf("play avi file!\n");
- }
-
- void play_rmvb_file(HANDLE hFile)
- {
- printf("play rmvb file!\n");
- }
-
- void play_mpeg_file(HANDLE hFile)
- {
- printf("play mpeg file!\n");
- }