代理模式的使用時機:
當真正物件的實體化十分耗時或耗資源時。例如:
當真正物件的實體化十分耗時或耗資源時。例如:
- 遠端代理(Remote):當物件在不同的位址空間,可以為此物件提供局部代理。這算是最容易理解的case,因為proxy處理了遠端存取的細節,而且提供相同的介面。所以同樣的程式不需修改介面,也可以存取真實的物件。
- 虛擬代理(Virtual):透過代理來存放實體化需要很長時間的真實物件。這是說,如果一開始所有的物件都必須實體化才能執行下去的case。此時用代理,則可讓資源分散,直到真正的需求來臨時,才要實體化很大的物件。什麼樣的case需要這種模式?例如有許多影像的網頁,當真正需要顯示影像時,代理才將影像讀進來,以減少網路資源的消耗。這表示網頁的loader在讀完文字檔、建立代理影像物件後,就可以結束工作。而真正讀取影像的事,就交給代理影像的物件了。如此一來,loader就不會牽涉太多讀取影像的功能,降低彼此的耦合,除錯及維護、發展更容易。
- 安全代理(Protection):用來控制真實物件存取時的許可權。也就是說,客戶端想要存取真實物件,而兩者之間有一proxy物件。透過控制proxy物件,就可以控制客戶端和真實物件之間的資訊。而重點仍然是,程式不必重寫,只要proxy物件和真實物性的介面相同即可!
- 智慧參考:調用真實物件時,代理物件會判斷已提供的資源數,用來決定是否允許大量資源的調用或重覆要求。其實作用和安全代理一樣,就是掌控真實物件和其客戶端之間的溝通。
沒有留言:
張貼留言