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面向对象设计模式


目录
相关文章
|
25天前
|
设计模式 存储 算法
PHP中常用的设计模式
设计模式是软件设计中解决问题的常见模式,它们提供了良好的实践,但使用时需注意其可能带来的耦合和测试难度问题。例如,单例模式可能导致全局状态,降低可测试性,而依赖注入可以作为更好的替代方案。
19 4
PHP中常用的设计模式
|
3天前
|
设计模式 算法 PHP
php模式
【7月更文挑战第18天】php模式
4 2
|
9天前
|
设计模式 中间件 PHP
探索PHP中的中间件模式
【7月更文挑战第12天】在现代的Web开发中,设计模式的应用对于代码的可维护性、扩展性和复用性至关重要。本文将深入探讨PHP语言中如何实现中间件模式,这是一种用于管理HTTP请求和响应的处理流程的设计模式。我们将通过具体示例来展示中间件模式如何在PHP项目中提升代码结构,并分析其在处理Web请求时的优势。
|
8天前
|
设计模式 开发框架 中间件
探索PHP中的中间件模式
【7月更文挑战第13天】在现代的Web开发中,设计模式扮演着至关重要的角色。本文将通过PHP语言的视角,深入探讨中间件模式的概念、实现及其在Web开发中的应用。我们将从中间件的定义开始,逐步过渡到如何在PHP框架中实现中间件,以及如何利用中间件来简化代码结构、增强应用的可扩展性和维护性。文章最后会提供一些实际案例,帮助读者更好地理解和运用中间件模式。
|
14天前
|
设计模式 中间件 PHP
深入理解PHP中的中间件模式
【7月更文挑战第7天】在Web开发的海洋中,PHP作为一艘灵活且强大的船,承载着无数的项目和解决方案。本文将揭开PHP中一个不为人知的角落——中间件模式,它如同船上的指南针,指引着请求的处理方向。我们将从中间件的定义出发,探索其在PHP中的应用实例,并深入分析其工作原理与实现方式,最终通过代码示例来揭示这一模式如何在实际应用中发挥巨大作用。文章旨在为读者提供对PHP中间件模式的全面认识,帮助开发者更好地利用这一模式优化项目架构。
|
10天前
|
设计模式 中间件 测试技术
PHP中的中间件模式解析与实践
【7月更文挑战第11天】在现代Web开发中,中间件模式已成为设计高效、可维护应用程序的关键。本文深入探讨了PHP环境下中间件模式的实现方法,并提供了一个实际示例来演示如何利用中间件优化请求处理流程。
13 1
|
10天前
|
存储 设计模式 监控
深入理解PHP中的中间件模式
【7月更文挑战第11天】本文将探索PHP中实现中间件模式的奥秘,从理论到实践,逐步剖析如何通过中间件提升代码的可维护性和扩展性。我们将摒弃传统的摘要形式,而是以一次虚拟的开发者对话引入话题,展现中间件在PHP项目中的应用价值和实现策略。
|
19天前
|
设计模式 存储 JavaScript
js设计模式【详解】—— 享元模式
js设计模式【详解】—— 享元模式
26 6
|
23天前
|
设计模式 缓存 Java
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
Java设计模式:享元模式实现高效对象共享与内存优化(十一)
|
25天前
|
设计模式 存储 Java
Java设计模式之享元模式详解
Java设计模式之享元模式详解