博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP设计模式——享元模式
阅读量:6438 次
发布时间:2019-06-23

本文共 2018 字,大约阅读时间需要 6 分钟。

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

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

    

         UML类图:

        

          角色分析:

          享元工厂角色(FWFactory):创建并管理BlogModel对象。

          所有具体享元父接口角色(BolgModel):接受并作用与外部状态。

          具体享元角色(JobsBlog):具体变化点,为内部对象增加储存空间。

 

           代码实现:

           

"; } function showColor() { echo "
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();}

        优点:

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

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

        缺点:

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

 

         适用场景:

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

欢迎关注我的视频课程,地址如下,谢谢。

你可能感兴趣的文章
Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架
查看>>
HTTP相关整理(上)
查看>>
浙江环宇集团“营改增”项目启动会成功举办
查看>>
EM 算法求解高斯混合模型python实现
查看>>
一次性比较目前前端最流行的状态管理,mobx,vuex,redux-saga使用方式用方式
查看>>
2018.4.24-ml笔记(多元线性回归)
查看>>
特斯拉进化论:舍命狂奔背后的生存哲学
查看>>
除了叫好也应关注GDPR对数字产业的负效应 | 热评
查看>>
Vue.js 子组件的异步加载及其生命周期控制-------异步加载子组件,子组件的生命周期控制过程不一样...
查看>>
编写可维护的JavaScript
查看>>
高效的CSS代码(2)
查看>>
企业数据创新之旅-数据上云与备份容灾
查看>>
React prop类型检查与Dom
查看>>
jQuery Ajax
查看>>
JS-匀速运动-运动停止
查看>>
朱兰的质量三部曲——《可以量化的管理学》
查看>>
丰田生产方式和TOC工序切换时间的解决
查看>>
Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
查看>>
ODCC将发布首本中国数据中心选址“工具书”
查看>>
51行代码实现简单的PHP区块链
查看>>