一. 定義 1. 享元模式是池技術的一種實現方式,使用共用對象來支持細粒度的對象 2. 享元模式把對象信息分為了兩個部分 (1)內部狀態 : 可以作為對象的動態附加信息,不必存儲在具體的對象中的屬性(id,postAddress) (2)外部狀態 : 對象得以依賴的一個標記,隨環境改變而改變...
一. 定義
- 享元模式是池技術的一種實現方式,使用共用對象來支持細粒度的對象
- 享元模式把對象信息分為了兩個部分
(1)內部狀態 : 可以作為對象的動態附加信息,不必存儲在具體的對象中的屬性(id,postAddress)
(2)外部狀態 : 對象得以依賴的一個標記,隨環境改變而改變 (eg:科目+考試地點的複合字元串)
- 享元模式角色
(1)Flyweight:抽象享元角色 (eg:SignInfo)
(2)ConcreteFlyweight:具體享元操作(eg:SignInfo4Pool),該類中不應該存在一個方法能同時修改外部狀態和內部狀態,因為內部狀態不能隨環境改變而改變
(3)unsharedConcreteFlyweight:不可共用的享元角色-不存在外部狀態或線程安全要求,不能使用共用對象細化的對象
(4)FlyweightFactory:享元工廠-構造對象池,提供從池中獲取對象的方法
- [註]:
(1)享元模式對象池中的角色應儘量多 , 多到滿足業務為止
(2)儘量使用Java基本類型作為外部狀態,如果把對象作為外部狀態放到對象池中(HashMap),則需要重寫hashcode()和equals(),造成性能不足