首页 » 网站建设 » php模板本身技巧_PHP设计模式之模板方法模式

php模板本身技巧_PHP设计模式之模板方法模式

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

GoF类图

在这里插入图片描述

php模板本身技巧_PHP设计模式之模板方法模式

代码实现

php模板本身技巧_PHP设计模式之模板方法模式
(图片来自网络侵删)

abstractclassAbstractClass{publicfunctionTemplateMethod(){$this->PrimitiveOperation1();$this->PrimitiveOperation2();}abstractpublicfunctionPrimitiveOperation1();abstractpublicfunctionPrimitiveOperation2();}

定义一个抽象类,有一个模板方法TemplateMethod(),这个方法中我们对算法操作方法进行调用。
而这些算法抽象方法是在子类中去实现的。

classConcreteClassAextendsAbstractClass{publicfunctionPrimitiveOperation1(){echo'详细类A实现方法1',PHP_EOL;}publicfunctionPrimitiveOperation2(){echo'详细类A实现方法2',PHP_EOL;}}classConcreteClassBextendsAbstractClass{publicfunctionPrimitiveOperation1(){echo'详细类B实现方法1',PHP_EOL;}publicfunctionPrimitiveOperation2(){echo'详细类B实现方法2',PHP_EOL;}}

详细的实现类,它们只须要去实现父类所定义的算法就可以了。

$c=newConcreteClassA();$c->TemplateMethod();$c=newConcreteClassB();$c->TemplateMethod();

在客户真个调用中,实例化子类,但调用的是子类所继续的父类的模板方法。
就可以实现统一的算法调用了。

模板方法模式相信只假如做过一点面向工具开拓的朋友都会多多少少利用过。
由于真的非常常见一些框架中常常会有某些功能类有初始化的功能,在初始化的函数中都会调用很多内部的其他函数,这实在也是一种模板方法模式的运用模板方法模式可以很方便的实现钩子函数。
就像很多模板或者开源系统中给你准备好的钩子函数。
比如某些博客开源程序会预留一些广告位或者分外位置的钩子函数让利用者自己按需实现模板方法模式适用于:一次性实现一个算法中不变的部分,并将可变的部分留给子类来实现;将子类中公共的行为提取出来并集中到父类中;掌握子类的扩展;这个模式表示了一个叫“好莱坞法则”的原则,那便是“别找我们,我们来找你”

在公司中,我非常的推崇敏捷式的项目管理,当然,这里也不是说传统的项目管理有多么不好,只是敏捷更适宜我们这种短平快的公司。
在敏捷中,我们采取的是Scurm框架,它实在便是一个模板。
它定义了四种会议、三种职员、三个工具。
在每个项目的详细实现中,我们都会遵守这些规则,但详细的实现又不会一样。
比如有时我们是一周一个迭代,有时是一个月一个迭代。
有时我们不须要回顾会议,而是将回顾和评审会议放在了一起进行。
不管怎么样,我们会在Scurm的根本上进行灵巧的项目开拓。
而做为领导的我,只须要在每个项目中调取Scurm的基本流程就可以了。
以是说,公司的强大和大家的学习是分不开的,好用的东西当然要时候学习分享并运用啦!

完全代码:https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method.php

实例

不发短信了,这次我们实现的是一个Cache类的初始化部分。
就像上文说过的一些框架中的工具类。
一样平常Cache我们会利用Memcached或者Redis来实现,以是我们抽取一个公共Cache类,然后让Memcached和Redis的Cache实现类都继续它。
在公共类中,通过模板方法来进行实现类的一些初始化事情,这些事情由父类统一调用,实现类只须要实现每一个步骤的详细内容就可以了。

缓存类图

在这里插入图片描述

完全源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method-cache.php

<?phpabstractclassCache{private$config;private$conn;publicfunction__construct(){$this->init();}publicfunctioninit(){$this->GetConfig();$this->OpenConnection();$this->CheckConnection();}abstractpublicfunctionGetConfig();abstractpublicfunctionOpenConnection();abstractpublicfunctionCheckConnection();}classMemcachedCacheextendsCache{publicfunctionGetConfig(){echo'获取Memcached配置文件!
',PHP_EOL;$this->config='memcached';}publicfunctionOpenConnection(){echo'链接memcached!',PHP_EOL;$this->conn=1;}publicfunctionCheckConnection(){if($this->conn){echo'Memcached连接成功!
',PHP_EOL;}else{echo'Memcached连接失落败,请检讨配置项!
',PHP_EOL;}}}classRedisCacheextendsCache{publicfunctionGetConfig(){echo'获取Redis配置文件!
',PHP_EOL;$this->config='redis';}publicfunctionOpenConnection(){echo'链接redis!',PHP_EOL;$this->conn=0;}publicfunctionCheckConnection(){if($this->conn){echo'Redis连接成功!
',PHP_EOL;}else{echo'Redis连接失落败,请检讨配置项!
',PHP_EOL;}}}$m=newMemcachedCache();$r=newRedisCache();

解释

这样一个大略的缓存类我们就实现了。
是不是和很多框架中的代码非常类似。
子类只须要定义自己的实现就可以了,剩下的重复代码都让父类去完成,如果没有父类,它们都须要自己实现一个init()方法当然,须要增加其它的实现类时,也只须要继续这个Cache父类后完本钱身的实现就可以了,客户端面对这些实现类都能非常轻松,由于它们知道自己只须要先调用一下初始化方法可以利用这个类了,不管是哪一个实现类都是一样的下期看点

模板方法模式是不是也非常大略。
最紧张的是这样的设计模式跟我们的生活很靠近,在我们的事情学习过程会非常随意马虎见到并利用到。
这样的模式切实其实不能挂在常用设计模式的标签下,由于它比常用更常用。
好了,我们的进度还不错哟,下一个模式正等着我们呢,它可是大名鼎鼎的单例模式。

标签:

相关文章

PHP实现文字转图片的代码与应用

图片处理技术在各个领域得到了广泛应用。在PHP编程中,文字转图片功能同样具有很高的实用价值。本文将针对PHP实现文字转图片的代码进...

网站建设 2025-03-02 阅读1 评论0

NAN0017探索新型纳米材料的奥秘与应用

纳米技术作为一门新兴的交叉学科,近年来在材料科学、生物医学、电子工程等领域取得了举世瞩目的成果。其中,NAN0017作为一种新型纳...

网站建设 2025-03-02 阅读3 评论0

L26368XO代码其背后的创新与突破

编程语言在各个领域发挥着越来越重要的作用。在众多编程语言中,L26368XO代码以其独特的优势,成为了业界关注的焦点。本文将深入剖...

网站建设 2025-03-02 阅读1 评论0

HTML字体背景打造个化网页设计的关键元素

网页设计已经成为现代网络传播的重要手段。在众多网页设计元素中,字体和背景的搭配尤为关键。本文将从HTML字体背景设置的角度,探讨其...

网站建设 2025-03-02 阅读1 评论0