PHP设计模式——享元模式(Flyweight Pattern)
享元,这个两个字不太好理解,从它的英文名称倒是比较贴切。它可以避免重复创建相同的对象即可以节省内存、提高性能。
其实有点类似单例模式,获取一个对象(或者数据)时候会先检查是否已经过。但不同的地方是单例是判断一个类是否实例化过,而享元是判断要实例化的对象(可以是单个/多个对象或数据)是否已经存在。
<?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; } } } }
发表评论