享元模式是對物件池的一種實現,它的英文名稱叫做flyweight,代表輕量級的意思,享元模式用來盡可能減少記憶體使用量,它適合用於可能存在大量重複物件的場景,來快取可共享的物件,達到物件共享、避免建立過多物件的效果,這樣一來就可以提公升效能、避免記憶體移除等。
享元物件中的部分狀態是可以共享,可以共享的狀態成為內部狀態,內部狀態不會隨著環境變化;不可共享的狀態稱為外部狀態,它們會隨著環境的改變而改變。在享元模式中好建立乙個物件的容器,在經典的享元模式中該容器為乙個map,它的鍵是享元物件的內部狀態,它的值就是享元物件本身。客戶端程式通過這個內部狀態從享元工廠中獲取享元單元,如果快取則使用快取物件,否則建立乙個享元物件並且存入容器中,這樣一來避免了建立過多物件的問題。
使用共享物件可有效地支援大量的細粒度的物件
角色介紹
flyweight:享元物件抽象基類或介面
concreteflyweight:具體的享元物件
flyweightfactory:享元工廠,負責管理享元物件池和建立享元物件。
public inte***ce credit
public class subjectcredit implements credit
public int getcredit()
public void setcredit(int credit)
public string getsubject()
public void setsubject(string subject)
@override
public void showcredit()
@override
public string tostring() ';}}
public class creditfactory else }}
public class testflyweight
}
建立物件 -> subject = [語文]
建立物件 -> subject = [數學]
使用快取 -> subject = [語文]
建立物件 -> subject = [英語]
使用快取 -> subject = [數學]
subjectcredit
------------------
subjectcredit
------------------
subjectcredit
------------------
subjectcredit
------------------
subjectcredit
------------------
從輸出結果可以看到,科目語文和數學在只有第一次查詢的時,建立了一次物件,後續的查詢都是用的快取池中的物件,相當於乙個物件的快取,避免了物件的重複建立與**,在一定程度上節省了記憶體的開支。在這個例子中,內部狀態就是credit欄位,內部狀態是不發生改變的,而外部狀態是subject,credit會隨著subject的改變而改變。 設計模式(享元模式)
享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...
設計模式 享元模式
享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...
設計模式 享元模式
舉個圍棋的例子,圍棋的棋盤共有361格,即可放361個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...