PHP设计模式——享元模式
生活随笔
收集整理的這篇文章主要介紹了
PHP设计模式——享元模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
聲明:本系列博客參考資料《大話設計模式》,作者程杰。
??????? 享元模式使用共享物件,用來盡可能減少內存使用量以及分享資訊給盡可能多的相似物件;它適合用于只是因重復而導致使用無法令人接受的大量內存的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。
????
???????? UML類圖:
????????
????????? 角色分析:
????????? 享元工廠角色(FWFactory):創建并管理BlogModel對象。
????????? 所有具體享元父接口角色(BolgModel):接受并作用與外部狀態。
????????? 具體享元角色(JobsBlog):具體變化點,為內部對象增加儲存空間。
?
?????????? 代碼實現:
???????????
<?php /*** Created by PhpStorm.* User: LYL* Date: 2015/5/16* Time: 12:00*//**所有享元父接口角色* Interface IBlogModel*/ interface IBlogModel {function showTime();function showColor(); }/**喬布斯的博客模板* Class JobsBlog*/ class JobsBlog implements IBlogModel {function showTime(){echo "紐約時間:5點整<br/>";}function showColor(){echo "<div style='color: #006600;height: 30;width: 30;background-color: #898989;'>Jobs</div>";} }/**雷軍博客模板* Class LeiJunBlog*/ class LeiJunBlog implements IBlogModel {function showTime(){echo "北京時間:17點整<br/>";}function showColor(){echo "<div style='color:#c7254e;height: 30;width: 100;background-color: #898989;'>雷軍</div>";} }/**博客模板工廠* Class BlogFactory*/ class BlogFactory {private $model=array();function getBlogModel($name){if(isset($this->model[$name])){echo "我是緩存里的<br/>";return $this->model[$name];}else{try{echo "我是新創建的<br/>";$class=new ReflectionClass($name);$this->model[$name]=$class->newInstance();return $this->model[$name];}catch(ReflectionException $e){echo "<span style='color: #ff0000;'>你要求的對象我不能創建哦。</span><br/>";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.將許多“虛擬”對象的狀態集中管理
??????? 缺點:
???????? 一旦被實現,單個的邏輯實現將無法擁有獨立而不同的行為
?
???????? 適用場景:
????????? 當一個類有許多的實例,而這些實例能被同一方法控制的時候,我們就可以使用享元模式。
歡迎關注我的視頻課程,地址如下,謝謝。
總結
以上是生活随笔為你收集整理的PHP设计模式——享元模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Matlab与c++程序生成的数据文件
- 下一篇: iBatis.Net系列(一)-简介