2008年10月8日 星期三

Proxy : 不只是設計模式

proxy

Proxy是一種設計模式。Wiki上是這麼說的:

A proxy, in its most general form, is a class functioning as an interface to another thing. The other thing could be anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.

不過今天的內容跟這個沒太多關係。

最近碰到一個狀況。

我們在遊戲場景裡頭產生了很大量的物件,大約五千個吧。由於程式結構的關係,並沒有利用動態的方式管理這些物件,以致這五千個物件使用了很大量的記憶體,必須要想辦法節省下來。

第一個想法當然是把這些物件改成動態管理,需要的生成,不需要的就釋放掉。不過這麼一來,物件生成的順序、物件之間的關聯性、相依性,就造成了很大的困擾。我們必須從核心程式去調整,甚至在資料方面都必須一起修改。怎麼算,都是一個不小的手術,大概是半身麻醉的等級。

就在我塗塗改改,畫著結構設計圖,想著要怎麼調整程式結構的時候,突然間,Proxy出現了。

我將這些物件套用Proxy結構,把物件之間的關聯性和相依性,保留在Proxy物件中,占用比較大量記憶體的資料部分,就改用動態的管理。需要的時候,由Proxy物件來產生,用完了,也從Proxy物件去釋放。至於Proxy物件呢,就像原先的程式結構一樣,遊戲場景裡放了五千個。

於是乎,物件生成的順序不需要調整,物件之間的關聯性、相依性不需要調整,核心程式也不需要動大手術,只需要在這些場景物件上,把Proxy模式導入。

所以Proxy不只是設計模式,它還成了一種改善程式品質的手法。

不過,最後實做的結果又不太一樣了。

因為原來的物件裡面,早已經將資料部分分離出來,所以我只是修改了幾行程式碼,改成動態的取得資料以及釋放資料。

搞了半天,如此而已..

沒有留言: