10 享元模式

2022-05-29 04:30:15 字數 1757 閱讀 1687

1)有客戶要求以新聞的形式發布

2)有客戶要求以部落格的形式發布

1)享元模式也叫蠅量模式:運用共享技術有效的支援大量細粒度的物件

2)常用於系統底層開發,解決系統的效能問題。像資料庫連線池,裡面都是建立好的連線物件,在這些連線物件中有我們需要的則直接拿來用,避免重新建立,如果沒有我們需要的,則建立乙個

3)享元模式能夠解決重複物件的記憶體浪費問題,當系統中有大量相似物件,需要緩衝池時。可以從直接從緩衝池拿,這樣可以降低系統記憶體,同時提高效率。

4)享元模式經典的應用場景就是池技術,string常量池、資料庫連線池、緩衝池等。

flyweight是抽象的享元角色,他是產品的抽象類,同時定義出物件的外部狀態和內部狀態的介面或實現。

2)concreteflyweight 是具體的享元角色,是具體的產品類,實現抽象角色定義相關業務

3)unsharedconcreteflyweight是不可共享角色,一般不會出現在享元工廠。

4)flyweightfactory 享元工廠類,用於構建乙個池容器,同時提供從池中獲取物件方法。

內部狀態是指物件共享出來的資訊,儲存在享元物件內部且不會隨環境改變而改變。

外部狀態指物件得以依賴的乙個標記,隨環境的改變而改變、不可共享的狀態。

1)思路分析圖

**實現

public class client 

}

// **工廠類,根據需要返回乙個**

public class websitefactory

return (website)pool.get(type);

} //獲取**分類的總數 (池中有多少個**型別)

public int getwebsitecount()

}

public abstract class website 

//具體**

public class concretewebsite extends website

@override

public void use(user user)

}

public class user 

public string getname()

public void setname(string name)

}

1)原始碼分析

**說明

public class flyweight 

}

1)享元模式,「享」表示共享,「元」表示物件

2)系統中有大量物件,這些物件消耗大量記憶體,並且物件的狀態大部分可以外部化時,我們就可以考慮選用享元模式。

3)用唯一標識碼判斷,如果記憶體中有,則返回這個唯一標識碼所標識的物件,用hashmap/hashtable儲存

4)享元模式大大減少了物件的建立,降低了程式記憶體的占用,提高效率

5)享元模式提高了系統複雜度。使用時,注意劃分內部狀態和外部狀態,並且需要有乙個工廠類加以控制

6)經典應用場景是緩衝池的場景,比如string常量池、資料庫連線池

設計模式(C ) 10享元模式

推薦閱讀 在軟體開發中,當我們需要對某些物件重複建立,且最終只需要得到單一結果。如果使用一般思維,那我們將浪費很多記憶體空間,為此,我們引入享元模式。所謂享元模式即共享物件,該模式利用先前建立的已有物件,通過某種規則去判斷當前所需物件是否可以利用原有物件做相應修改後得到想要的效果,如果可以,則只需要...

10 Python與設計模式 享元模式

假設有乙個網上咖啡選購平台,客戶可以在該平台上下訂單訂購咖啡,平台會根據使用者位置進行線下配送。假設其咖啡物件構造如下 class coffee name price 0 def init self,name self.name name self.price len name 在實際業務中,咖啡 ...

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...