Maison > php教程 > php手册 > PHP设计模式享元模式

PHP设计模式享元模式

WBOY
Libérer: 2016-06-13 09:04:08
original
935 Les gens l'ont consulté

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 
Copier après la connexion

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();
}
Copier après la connexion

 

优点:

1.减少运行时对象实例的个数,节省内存

2.将许多“虚拟”对象的状态集中管理

缺点:

一旦被实现,单个的逻辑实现将无法拥有独立而不同的行为

 

适用场景:

当一个类有许多的实例,而这些实例能被同一方法控制的时候,我们就可以使用享元模式。


 

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal