程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP設計模式——享元模式

PHP設計模式——享元模式

編輯:關於PHP編程

PHP設計模式——享元模式


聲明:本系列博客參考資料《大話設計模式》,作者程傑。

享元模式使用共享物件,用來盡可能減少內存使用量以及分享資訊給盡可能多的相似物件;它適合用於只是因重復而導致使用無法令人接受的大量內存的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。

 

UML類圖:

\

 

角色分析:

享元工廠角色(FWFactory):創建並管理BlogModel對象。

所有具體享元父接口角色(BolgModel):接受並作用與外部狀態。

具體享元角色(JobsBlog):具體變化點,為內部對象增加儲存空間。

 

代碼實現:

 

;
    }

    function showColor()
    {
        echo 
Jobs ; } } /**雷軍博客模板 * Class LeiJunBlog */ class LeiJunBlog implements IBlogModel { function showTime() { echo 北京時間:17點整
; } function showColor() { echo 雷軍 ; } } /**博客模板工廠 * Class BlogFactory */ class BlogFactory { private $model=array(); function getBlogModel($name) { if(isset($this->model[$name])) { echo 我是緩存裡的
; return $this->model[$name]; } else { try { echo 我是新創建的
; $class=new ReflectionClass($name); $this->model[$name]=$class->newInstance(); return $this->model[$name]; } catch(ReflectionException $e) { echo 你要求的對象我不能創建哦。
; return null; } } } }
客戶端調用代碼:

 

 

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.將許多“虛擬”對象的狀態集中管理

缺點:

一旦被實現,單個的邏輯實現將無法擁有獨立而不同的行為

 

適用場景:

當一個類有許多的實例,而這些實例能被同一方法控制的時候,我們就可以使用享元模式。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved