青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

力為的技術博客

聯系 聚合 管理
  154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

                                                                          DownLoad
OGRE
分析之設計模式(四)

Mythma

 Email: mythma@163.com

      OGRE的設計結構十分清晰,這得歸功于設計模式的成功運用。

八、Iterator

說到Iterator,讓人首先想到的是STL中各種iteratorsOGRE源碼中廣泛用到了STL,尤其是容器map。但OGRE大部分情況下并沒有直接使用與容器配套的迭代器,而是在iterator上包了一層。對序列式容器的iteratorOGRE包裝為VectorIterator<T>,其const形式為ConstVectorIterator;對關聯式容器(map),包裝為MapIterator<T>,其const形式為ConstMapIterator。所以從另一個角度看,使用的是Adapter模式。

OGRE的包裝本身沒有什么復雜,看一下mapiterator封裝就清楚了:

   template <class T>
    
class MapIterator
    
{
    
private:
        
typename T::iterator mCurrent;
      
  typename T::iterator mEnd;
        /**//// Private constructor since only the parameterised constructor should be used
        MapIterator()  {};
    
public:
     
   typedef typename T::mapped_type MappedType;
        typedef typename T::key_type KeyType;
        /**//** Constructor.
        @remarks
            Provide a start and end iterator to initialise.
        */

        MapIterator(typename T::iterator start, typename T::iterator end)
            : mCurrent(start), mEnd(end)
        
{
        }
        
/**//** Returns true if there are more items in the collection. */
        
bool hasMoreElements(voidconst
        
{
            
return mCurrent != mEnd;
        }
        
/**//** Returns the next value element in the collection, and advances to the next. */
        typename T::mapped_type getNext(
void)
        
{
            
return (mCurrent++)->second;
        }
        
/**//** Returns the next value element in the collection, without advancing to the next. */
        typename T::mapped_type peekNextValue(
void)
        
{
            
return mCurrent->second;
        }
        
/**//** Returns the next key element in the collection, without advancing to the next. */
        typename T::key_type peekNextKey(
void)
        
{
            
return mCurrent->first;
        }
        
/**//** Required to overcome intermittent bug */
         MapIterator<T> & 
operator=( MapIterator<T> &rhs )
         
{
             mCurrent = rhs.mCurrent;
             mEnd = rhs.mEnd;
             
return *this;
         }
        
/**//** Returns a pointer to the next value element in the collection, without 
            advancing to the next afterwards. */

        typename T::pointer peekNextValuePtr(
void)
        
{
            
return &(mCurrent->second);
        }
        
/**//** Moves the iterator on one element. */
        
void moveNext(void)
        
{
            mCurrent++;
        }

 };

 

九、Observer

      Observer模式“定義對象間一對多的依賴關系,當一個對象的狀態發生變化時,所有依賴他的對象都得到通知并自動更新”。回想一下OGRE的消息機制,用的正是該模式。

      為了得到OGRE的各種消息(更新、鼠標、鍵盤),在初始化EventProcessor后需要向它添加各種ListenersKeyListenerMouseListenerMouseMotionListener。而EventProcessor本身又是個FrameListener,在它startProcessingEvents的時候,又以FrameListener的身份注冊到Root中。可以看出,Root是消息的發布者EventProcessor 是個代理,它把消息分發給各種訂閱者KeyListenerMouseListenerMouseMotionListener

至于消息是如何分發的,可以參考Chain of Responsibility模式或消息機制分析。

 

十、Strategy

Strategy模式在于實現算法與使用它的客戶之間的分離,使得算法可以獨立的變化。

回想一下Bridge模式,可以發現,兩者之間有些相似性:使得某一部分可以獨立的變化。只不過Bridge是將抽象部分與它的實現部分分離。從兩者所屬的類別來看,Bridge強調靜態結構,而Strategy強調更多的是行為——算法的獨立性。

同樣是Bridge模式中的例子,若把Mesh各版本文件讀取的實現看作是算法,把MeshSerializer看作是算法的客戶,那么該例也可以看作是Strategy模式。具體參考Bridge模式。

從上面可以看出,模式之間本沒有絕對的界限,從不同的角度看可以得到不同的結論;另一方面,模式的實現也是隨機應變,要與具體的問題想結合。

 

十一、Template Method

      Template Method比較簡單的一個模式,屬于類行為模式。可以用“全局與細節”、“步驟與實現”來概括,具體就是基類定義全局和步驟,子類來實現每一步的細節。

      OGRE給的Example框架使用了該模式,并具代表性。看一下ExampleApplicationsetup()成員:

      bool setup(void)
    
{
        mRoot = 
new Root();

        setupResources();

        
bool carryOn = configure();
        
if (!carryOn) return false;

        chooseSceneManager();
        createCamera();
        createViewports();

        
// Set default mipmap level (NB some APIs ignore this)
        TextureManager::getSingleton().setDefaultNumMipmaps(5);

        
// Create any resource listeners (for loading screens)
        createResourceListener();
        
// Load resources
        loadResources();

        
// Create the scene
        createScene();

        createFrameListener();

        
return true;

    }

 

      該成員函數調用的其他virtual成員函數都有默認的實現,若不滿足需求,子類可以自行實現。而setup()只是定義了一個設置順序。

 

posted on 2005-12-14 11:26 力為 閱讀(3969) 評論(4)  編輯 收藏 引用 所屬分類: 7. OGRE Analysis

評論

# re: OGRE分析之設計模式(四) 2006-09-11 12:12 天歌
寫得很不錯,頂
我想學OGre+設計模式 經典
感謝阿!!!  回復  更多評論
  

# re: OGRE分析之設計模式(四) 2007-02-03 03:22 rhett
你的文章寫的很多,讓我對ogre的理解更進一步,希望你能繼續   回復  更多評論
  

# re: OGRE分析之設計模式(四) 2007-07-09 11:29 Lucien
此章內容不錯,全部看完,力為繼續加油!  回復  更多評論
  

# re: OGRE分析之設計模式(四) 2008-11-24 10:22 lxzsh2000
非常好,感謝  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产女人aaa级久久久级| 欧美 日韩 国产精品免费观看| 欧美午夜女人视频在线| 亚洲一区二区在线看| 日韩午夜在线观看视频| 国产精品久久久久久影院8一贰佰| 亚洲欧美中文另类| 久久精品主播| 亚洲乱码精品一二三四区日韩在线| 亚洲国产欧美精品| 欧美婷婷久久| 久久久久久尹人网香蕉| 欧美风情在线观看| 午夜精品成人在线| 久久一区二区三区四区| 这里是久久伊人| 欧美中文字幕视频| 99riav久久精品riav| 亚洲自拍偷拍麻豆| 亚洲品质自拍| 亚洲综合色丁香婷婷六月图片| 亚洲电影成人| 国产精品99久久久久久久女警| 韩国av一区二区三区四区| 亚洲人成毛片在线播放| 国产欧美日韩精品丝袜高跟鞋 | 午夜精品美女久久久久av福利| 欧美一区二区三区另类| 一本色道久久综合亚洲精品不| 午夜精品久久久久久久男人的天堂| 亚洲成人资源网| 亚洲男女毛片无遮挡| 亚洲乱码日产精品bd| 欧美一区二区三区在线视频 | 亚洲国产综合在线| 久久久久久久久久久成人| 中文一区字幕| 美国三级日本三级久久99| 欧美一区国产在线| 欧美精品在线极品| 久久亚洲一区二区三区四区| 国产精品高清在线| 亚洲精品国产拍免费91在线| 影音先锋久久久| 午夜免费在线观看精品视频| 一区二区冒白浆视频| 免费在线亚洲| 欧美韩日亚洲| 伊人久久亚洲热| 亚洲欧美国产毛片在线| 亚洲午夜一区二区三区| 欧美美女福利视频| 欧美国产日本韩| 国产乱子伦一区二区三区国色天香 | 国产视频欧美| 亚洲女同同性videoxma| 亚洲女同性videos| 欧美三级中文字幕在线观看| 91久久精品视频| 99视频超级精品| 欧美精品一区三区| 亚洲欧洲综合| 在线亚洲精品| 欧美午夜视频在线| 亚洲一区二区三区欧美| 亚洲在线第一页| 国产精品视频大全| 亚洲欧美伊人| 久久久久久999| 伊人久久亚洲热| 美女免费视频一区| 亚洲精品一区在线观看香蕉| 在线亚洲免费视频| 国产精品一区二区男女羞羞无遮挡| 亚洲一区二区三区视频| 久久久久国产精品一区三寸| 国产亚洲欧美aaaa| 麻豆精品91| 亚洲免费高清视频| 欧美一二三区在线观看| 国产日韩欧美不卡在线| 久久99在线观看| 欧美成人高清视频| 国产精品99久久久久久白浆小说| 国产精品久久久久999| 欧美专区第一页| 亚洲电影有码| 午夜激情综合网| 黄色成人在线观看| 欧美另类videos死尸| 亚洲制服欧美中文字幕中文字幕| 久久在线视频| 一本大道久久a久久综合婷婷| 国产精品免费网站| 久久久久在线观看| 一本大道久久精品懂色aⅴ| 久久大香伊蕉在人线观看热2| 亚洲第一视频| 国产精品毛片在线看| 母乳一区在线观看| 亚洲一区在线播放| 亚洲国产一区二区三区青草影视 | 欧美在线免费观看视频| 欧美激情亚洲精品| 欧美一区综合| 日韩一区二区精品葵司在线| 国产日韩精品入口| 欧美猛交免费看| 久久综合网络一区二区| 亚洲永久视频| 亚洲精品一区二区三| 久久天堂成人| 午夜精品久久久久久久| 亚洲精品久久久蜜桃| 韩国福利一区| 国产精品黄色在线观看| 美日韩在线观看| 久久久不卡网国产精品一区| 正在播放亚洲| 亚洲国产清纯| 免费日本视频一区| 久久精品一区中文字幕| 午夜在线成人av| 亚洲一区二区不卡免费| 日韩视频国产视频| 亚洲高清视频在线观看| 狠狠干综合网| 国户精品久久久久久久久久久不卡| 国产精品成人观看视频免费| 欧美激情四色| 欧美精品久久久久久久免费观看 | 欧美专区亚洲专区| 午夜亚洲精品| 亚洲欧美日韩精品久久| 亚洲视频综合在线| 中文欧美字幕免费| 亚洲视频一区| 亚洲欧美国产日韩天堂区| 一区二区三区高清不卡| 一区二区三区成人精品| 99视频精品在线| 一本不卡影院| 亚洲男人av电影| 午夜精品成人在线| 久久成人在线| 久久一区二区三区av| 免费观看在线综合| 亚洲国产精品美女| 99热在这里有精品免费| 一区二区免费在线观看| 亚洲天堂偷拍| 欧美伊人久久| 美国三级日本三级久久99| 欧美高清在线一区| 欧美午夜视频在线| 国产欧美精品一区| 伊人婷婷欧美激情| 夜夜嗨av一区二区三区中文字幕| 一片黄亚洲嫩模| 欧美一区视频在线| 久久亚洲精品一区二区| 亚洲国产网站| 亚洲图片在线| 久久九九有精品国产23| 欧美顶级艳妇交换群宴| 国产精品v亚洲精品v日韩精品| 国产精品一二三| 亚洲福利视频三区| 亚洲欧美变态国产另类| 久久天天躁狠狠躁夜夜av| 亚洲国产成人精品久久| 亚洲视频在线观看网站| 久久精品国产99国产精品澳门 | 久久久久久免费| 一区二区三区日韩精品| 欧美一区不卡| 亚洲高清久久| 午夜影视日本亚洲欧洲精品| 老司机免费视频一区二区三区| 欧美日韩精品一区二区| 国内精品伊人久久久久av影院| 亚洲美女视频在线观看| 久久精品国产99国产精品澳门| 欧美激情网站在线观看| 午夜精品久久久久久久久久久久久| 欧美a级片网站| 国产日韩欧美精品在线| 99精品欧美| 蜜臀av性久久久久蜜臀aⅴ四虎 | 一区二区精品| 欧美不卡福利| 激情亚洲成人| 久久成人免费日本黄色| 亚洲人成网在线播放| 久久久久国产精品午夜一区| 国产精品成av人在线视午夜片| 亚洲欧洲一区二区天堂久久 | 欧美v国产在线一区二区三区| 在线亚洲高清视频| 欧美精品久久99|