享元模式是指使用共享物件,用來盡可能減少記憶體使用量以及分享資訊給盡可能多的相似物件;它適合用於只是因重複而導致使用無法令人接受的大量記憶體的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部資料結構,當需要使用時再將它們傳遞給享元。使用享元可以節省記憶體的開銷,特別適合處理大量細粒度物件,這些物件的許多屬性值是相同的,而且一旦建立則不允許修改。 享元模式中的享元可以使用方法的引數接收外部狀態中的資料,但外部狀態資料不會干擾到享元中的內部資料,這就使享元可以在不同的環境中被共享。
享元模式包括兩種狀態:
內蘊狀態:儲存在享元內部,不會隨環境的改變而有所不同,是可以共享的。
外蘊狀態:不可以共享的,它隨環境的改變而改變的,因此外蘊狀態是由客戶端來保持(因為環境的變化是由客戶端引起的)。
享元模式包括三種角色:
享元介面(plyweight):定義了對外公開的獲取其內部資料和接收外部資料的方法。
具體享元(concrete plyweight):享元介面的實現。
享元工廠(plyweight factory):該類的例項負責建立和管理享元物件,使用者或其他物件必須請求他以獲取乙個享元物件。
/**
* 享元模式
*/public class ******flyweight
}// 享元介面
inte***ce iflyweight
// 具體享元
class flyweight implements iflyweight
@override
public void dosomething()
}// 享元工廠
class flyweightfactory
return flyweight;
} public int size()
}
(注)
具體享元物件包括一些業務邏輯和具體演算法,但不包括介面的顯示和ui元件的應用,一般不會應用於多執行緒需求的功能中。
設計模式筆記 12 享元模式(結構型)
運用共享技術有效地支援大量細粒度的物件。採用純粹物件方案的問題在於大量細粒度的物件會很快充斥在系統中,從而帶來很高的執行時代價 主要指記憶體需求方面的代價。如何在避免大量細粒度物件問題的同時,讓外部客戶程式仍然能夠透明地使用物件導向的方式來進行操作?這需要用到享元模式,不過應用享元模式是需要進行評估...
設計模式 結構型 享元模式
如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時就應該考慮使用 還有物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件。public class flyweighttest class flyweightfactory publi...
java設計模式 享元模式(結構型模式)
在物件導向程式設計過程中,有時會面臨要建立大量相同或相似物件例項的問題。建立那麼多的物件將會耗費很多的系統資源,它是系統效能提高的乙個瓶頸。例如,圍棋和五子棋中的黑白棋子,影象中的座標點或顏色,區域網中的路由器 交換機和集線器,教室裡的桌子和凳子等。這些物件有很多相似的地方,如果能把它們相同的部分提...