声明:本系列博客参考资料《大话设计模式》,作者程杰。

享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

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

PHP设计模式——享元模式相关推荐

  1. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  2. 10-Python与设计模式--享元模式

    10-Python与设计模式--享元模式 一.网上咖啡选购平台 假设有一个网上咖啡选购平台,客户可以在该平台上下订单订购咖啡,平台会根据用户位置进行线下配送.假设其咖啡对象构造如下: class Co ...

  3. 设计模式--享元模式实现C++

    /********************************* *设计模式--享元模式实现 *C++语言 *Author:WangYong *Blog:http://www.cnblogs.co ...

  4. 【设计模式】Java设计模式 - 享元模式

    [设计模式]Java设计模式 - 享元模式

  5. Unity设计模式——享元模式(附代码)

    Unity设计模式--享元模式(附源码) 享元Flyweight模式是什么 享元模式是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的 ...

  6. 第二十二章 Caché 设计模式 享元模式

    文章目录 第二十二章 Caché 设计模式 享元模式 定义 优点 使用场景 结构图 描述 完整示例 实体类 抽象享元角色 实现享元角色 享元工厂 调用 思考 第二十二章 Caché 设计模式 享元模式 ...

  7. JavaScript设计模式-享元模式

    JavaScript设计模式-享元模式 概念 例子 内部状态与外部状态 享元模式的通用结构 例子 总结 github仓库地址:点击 [设计模式例子](https://github.com/fanhua ...

  8. JAVA 设计模式 享元模式

    用途 享元模式 (Flyweight) 运用共享技术有效地支持大量细粒度的对象. 享元模式是一种结构型模式. 结构 图-享元模式结构图 Flyweight : 它是所有具体享元类的超类或接口,通过这个 ...

  9. java设计模式---享元模式

    Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己 对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自己的 ...

最新文章

  1. 关闭、刷新、跳转、离开当前网页前提示
  2. JDK源码分析 NIO实现
  3. 算法---------数组-----------翻转单链表
  4. 10.22 tcpdump:监听网络流量
  5. 第十二章:Java_常用类
  6. 阿里云数据库Mysql被黑
  7. My SQL-4 函数
  8. 微软sql服务器开机自启,使用 SQL Server 服务启动选项
  9. ansys2017安装教程_ANSYS Student
  10. 漂亮的英文字体 android,资深字体设计师私藏的10大APP,只怪你知道的太晚 !
  11. 基于Modbus TCP的MCGS上位机软件教程
  12. 一文读懂AB测试原理及样本量计算的Python实现
  13. 总结了Linux系统中常用的命令
  14. 【工具】windows--word转PDF
  15. linux .so文件能解压吗,linux系统中rar解压文件安装和使用详解
  16. 经典的同步/互斥问题—哲学家进餐
  17. Oracle最新技术网站
  18. IFR报告显示过去五年全球工业机器人销量翻番
  19. 使用php-excel-reader读取excel文件
  20. 这本书为什么会被誉为Spring开发百科全书(文末附带源码视频)

热门文章

  1. Ogre wiki 中级教程1 动画,点之间行走及四元数的基本应用
  2. Asp.net在IIS6.0权限设置的问题,大牛进
  3. Happy Birthday
  4. 8个爽滑如丝的Windows小软件,不好用你拿王思葱砸死我
  5. 压缩图片_Word快速压缩图片大小
  6. html5怎么设置drop,HTML5 拖放(Drag 和 Drop)
  7. circle后面是什么意思 python_python小课堂16 - 函数篇
  8. 智伴机器人课文跟读哪里有_火了!智伴机器人竟然出现在2018年高考试卷
  9. Dubbo对于REST协议的支持
  10. MyBatis 缓存详解-一级缓存的不足