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


目录
相关文章
|
3天前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性与扩展性本文旨在探讨PHP中常见的设计模式及其应用,帮助开发者编写出更加灵活、可维护和易于扩展的代码。通过深入浅出的解释和实例演示,我们将了解如何使用设计模式解决实际开发中的问题,并提升代码质量。
在软件开发过程中,设计模式是一套经过验证的解决方案模板,用于处理常见的软件设计问题。PHP作为流行的服务器端脚本语言,也有其特定的设计模式应用。本文将重点介绍几种PHP中常用的设计模式,包括单例模式、工厂模式和策略模式,并通过实际代码示例展示它们的具体用法。同时,我们还将讨论如何在实际项目中合理选择和应用这些设计模式,以提升代码的可维护性和扩展性。
|
6天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
7天前
|
设计模式 算法 数据库连接
PHP中的设计模式:如何优化你的代码结构
在本文中,我们将深入探讨PHP中的设计模式。设计模式是解决常见软件设计问题的最佳实践。它们不是具体的代码,而是一种编程经验的总结。掌握设计模式可以帮助你写出更高效、灵活和可维护的代码。本文将介绍几种常见的设计模式,并通过示例展示如何在PHP项目中应用这些模式。无论你是PHP初学者还是有经验的开发者,都能从本文中获得启发和实用的技巧。
|
4天前
|
设计模式 数据管理 测试技术
PHP中的设计模式:单一职责原则在实战项目中的应用
在软件开发中,设计模式是解决问题的最佳实践。本文通过分析单一职责原则(SRP),探讨了如何运用这一原则来提升PHP项目的可维护性和扩展性。我们将从实际案例出发,展示单一职责原则在业务逻辑分离、代码解耦和提高测试效率方面的应用。无论是新手还是经验丰富的开发者,都能从中获益,进而编写出更健壮、更灵活的PHP代码。
|
5天前
|
设计模式 存储 安全
PHP中单例模式的深入解析与实践指南
在PHP开发领域,设计模式是构建高效、可维护代码的重要工具。本文聚焦于单例模式——一种确保类仅有一个实例,并提供全局访问点的模式。我们将从理论出发,探讨单例模式的基本概念、应用场景,并通过实际案例分析其在PHP中的实现技巧。最后,讨论单例模式的优势、潜在缺陷及如何在实际项目中合理运用。
|
1天前
|
设计模式 算法 PHP
PHP中的设计模式:提升代码的可维护性与扩展性
在软件开发中,设计模式是一套经过验证的解决特定问题的模板。对于使用PHP语言的开发者来说,合理运用设计模式不仅可以优化代码结构,还能显著提高项目的可维护性和扩展性。本文将探讨几种常见的设计模式及其在PHP中的应用,帮助开发者编写更高效、更灵活的代码。
|
4天前
|
设计模式 安全 PHP
PHP中的设计模式:单一职责原则在实战中的应用
在软件开发中,设计模式是解决常见问题的成熟方案。本文将通过分析单一职责原则这一设计原则,探讨如何在PHP应用程序中应用这一原则来提高代码的可维护性、扩展性和灵活性。我们将从实际案例出发,展示单一职责原则的具体应用方法,并解释其对项目开发周期和质量的积极影响。无论你是PHP初学者还是经验丰富的开发者,都能从中获益,提升你的编程实践水平。
|
1天前
|
设计模式 自然语言处理 算法
PHP中的设计模式:桥接模式的深入探索与应用
在PHP开发中,理解并运用设计模式是提升代码质量与可维护性的关键。本文聚焦于桥接模式——一种结构型设计模式,它通过封装一个抽象的接口,将实现与抽象分离,从而使得它们可以独立变化。不同于传统摘要的概述式表述,本文将以故事化的情境引入,逐步解析桥接模式的精髓,通过PHP代码示例详细展示其在实际项目中的应用,旨在为读者提供一个既深刻又易于理解的学习体验。
8 1
|
1天前
|
设计模式 算法 搜索推荐
PHP中的设计模式:提高代码可维护性的秘诀
在本文中,我们将探讨PHP设计模式的重要性以及它们如何帮助开发者编写出更加灵活、可维护的代码。我们将介绍几种常见的设计模式,包括单例模式、工厂模式和策略模式,并通过实际示例展示它们在PHP中的应用。最后,我们会讨论何时使用这些设计模式以及在实际项目开发中的最佳实践。
8 1
|
1天前
|
设计模式 Java
Java设计模式-享元模式(12)
Java设计模式-享元模式(12)