享元模式:采用一個共享來避免大量擁有相同內容對象的開銷。這種開銷中最常見、直觀的就是內存的損耗。享元模式以共享的方式高效的支持大量的細粒度對象。
享元模式
Flyweigtht
抽象享元角色(Flyweigtht):為具體享元角色規定了必須實現的方法,而外蘊狀態就是以參數的形式通過此方法傳入。
ConcreteFlywight
具體享元角色(ConcreteFlywight):實現抽象角色規定的方法。如果存在內蘊狀態,就負責為內蘊狀態提供存儲空間。
UnsharedConcreteFlywight
復合享元角色(UnsharedConcreteFlywight):它所代表的對象是不可以共享的,并且可以分解成為多個單純享元對象的組合。
FlyweigthtFactory
享元工廠角色(FlyweigthtFactory):負責創建和管理享元角色。要想達到共享的目的,這個角色的實現是關鍵。
享元模式的優缺點:享元模式的優點在于它大幅度地降低內存中對象的數量。但是,它做到這一點所付出的代價也是很高的:
1、享元模式使得系統更加復雜。為了使對象可以共享,需要將一些狀態外部化,這使得程序的邏輯復雜化。
2、享元模式將享元對象的狀態外部化,而讀取外部狀態使得運行時間稍微變長。
享元模式的使用場景:1、當我們發現某個類型的對象有大量的實例時,我們是否可以對這些實例進行分類,經過分類后,我們發現只有很少的類別的情況下。
2、我們發現通過使用享元模式后能夠提高系統的性能和不會帶來更多的復雜度時。