聲明:本系列博客參考資料《大話設計模式》,作者程傑。
享元模式使用共享物件,用來盡可能減少內存使用量以及分享資訊給盡可能多的相似物件;它適合用於只是因重復而導致使用無法令人接受的大量內存的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。
UML類圖:
角色分析:
享元工廠角色(FWFactory):創建並管理BlogModel對象。
所有具體享元父接口角色(BolgModel):接受並作用與外部狀態。
具體享元角色(JobsBlog):具體變化點,為內部對象增加儲存空間。
代碼實現:
; } function showColor() { echoJobs ; } } /**雷軍博客模板 * Class LeiJunBlog */ class LeiJunBlog implements IBlogModel { function showTime() { echo 北京時間:17點整
header(Content-Type:text/html;charset=utf-8); //------------------------門面模式測試代碼------------------ require_once ./Flyweight/Flyweight.php; $factory=new BlogFactory(); $jobs=$factory->getBlogModel(JobsBlog); if($jobs) { $jobs->showTime(); $jobs->showColor(); } $jobs1=$factory->getBlogModel(JobsBlog); if($jobs1) { $jobs1->showTime(); $jobs1->showColor(); } $leijun=$factory->getBlogModel(LeiJunBlog); if($leijun) { $leijun->showTime(); $leijun->showColor(); } $leijun1=$factory->getBlogModel(LeiJunBlog); if($leijun1) { $leijun1->showTime(); $leijun1->showColor(); } $aFanda=$factory->getBlogModel(aFanda); if($aFanda) { $aFanda->showTime(); $aFanda->showColor(); }
優點:
1.減少運行時對象實例的個數,節省內存
2.將許多“虛擬”對象的狀態集中管理
缺點:
一旦被實現,單個的邏輯實現將無法擁有獨立而不同的行為
適用場景:
當一個類有許多的實例,而這些實例能被同一方法控制的時候,我們就可以使用享元模式。