本文根據尚矽谷韓順平老師的設計模式課程編寫設計模式
乙個專案需求小型的外包專案,給客戶a做乙個產品展示**,客戶a的朋友感覺效果不錯,也希望做這樣的產品展示**,但是要求都有些不同:
有客戶要求以新聞的形式發布
有客戶人要求以部落格的形式發布
基本介紹
角色flyweight 是抽象的享元角色,他是產品的抽象類,同時定義出物件的外部狀態和內部狀態的介面或實現
concreteflyweight 是具體的享元角色,是具體的產品類,實現抽象角色定義相關業務
unsharedconcreteflyweight 是不可共享的角色,一般不會出現在享元工廠
flyweightfactory 享元構建乙個池容器,同時提供從池中獲取物件方法
**
//具體的**
public
class
concretewebsite
extends
website
@override
public
void
use(
)}
public
abstract
class
website
//**工廠類
public
class
websitefactory
return
(website)pool.
get(type);}
//獲取池中**分類的總數(池中有多少個**型別)
public
intgetwebsitecount()
}
public
class
client
}
原始碼jdk中的integer 使用的是享元模式
注意細節在享元模式這樣理解, 剪"就表示共享, 元表示物件
系統中有大量物件,這些物件消耗大量記憶體,並且物件的狀態大部分可以外部化時,我們就可以考慮選用享元模式
用唯一標識碼判斷,如果在記憶體中有,則返回這個唯一標識碼所標識的物件,用hashmap/hashtable儲存
享元模式大大減少了物件的建立,降低了程式內在的占用,提高效率
享元模式提高了系統的複雜度。需要分離出內部狀態和外部狀態,而外部狀態具有固化特性,不應該隨著內部狀態的改變而改變,這是我們使用享元模式需要注意的地方.
使用享元模式時,注意劃分內部狀態和外部狀態,並且需要有乙個工廠類加以控制。
享元模式經典的應用場景是需要緩衝池的場景,比如string常量池、 資料庫連線池
設計模式之享元模式
1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...
設計模式之 享元模式
享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...
設計模式之享元模式
享元模式運用共享技術有效地支援大量細粒度的物件。如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時應該考慮使用。物件的大多數狀態可以是外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時也可以考慮用享元模式。享元模式uml圖如下 如下 使用者 cl...