定義:享元模式是為數不多的,只為提公升系統效能而生的設計模式。主要作用就是復用大物件(重量級物件),以節省記憶體空間和物件建立時間 。
享元模式的主要優點是:相同物件只要儲存乙份,這降低了系統中物件的數量,從而降低了系統中細粒度物件給記憶體帶來的壓力。
其主要缺點是:
為了使物件可以共享,需要將一些不能共享的狀態外部化,這將增加程式的複雜性。
讀取享元模式的外部狀態會使得執行時間稍微變長。
使用場景:string常量池、資料庫連線池、緩衝池等等都是享元模式的應用,所以說享元模式是池技術的重要實現方式。
結構組成:
享元模式主要有三個角色:
flyweight:抽象享元角色。
concreteflyweight:具體享元。
flyweightfactory:享元工廠。享元工廠內部維護了乙個物件池,每次獲取物件都先從池中獲取,獲取不到再建立,並將物件儲存在在池中。
享元物件的資訊可以分為兩種狀態,內部狀態:內部狀態是可以共享的部分,它不會隨外界環境的變化而變化,內部狀態一般都作為物件池的key,而值就是享元物件本身。外部狀態:會隨著外界環境改變而改變的部分,它不被共享。
uml設計圖:
享元模式例項:
常見面試題:
暫無
設計模式(享元模式)
享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...
設計模式 享元模式
享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...
設計模式 享元模式
舉個圍棋的例子,圍棋的棋盤共有361格,即可放361個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...