深入浅析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
init(); } public function init() { $this->GetConfig(); $this->OpenConnection(); $this->CheckConnection(); } abstract public function GetConfig(); abstract public function OpenConnection(); abstract public function CheckConnection(); } class MemcachedCache extends Cache { public function GetConfig() { echo '获取Memcached配置文件!', PHP_EOL; $this->config = 'memcached'; } public function OpenConnection() { echo '链接memcached!', PHP_EOL; $this->conn = 1; } public function CheckConnection() { if ($this->conn) { echo 'Memcached连接成功!', PHP_EOL; } else { echo 'Memcached连接失败,请检查配置项!', PHP_EOL; } } } class RedisCache extends Cache { public function GetConfig() { echo '获取Redis配置文件!', PHP_EOL; $this->config = 'redis'; } public function OpenConnection() { echo '链接redis!', PHP_EOL; $this->conn = 0; } public function CheckConnection() { if ($this->conn) { echo 'Redis连接成功!', PHP_EOL; } else { echo 'Redis连接失败,请检查配置项!', PHP_EOL; } } } $m = new MemcachedCache(); $r = new RedisCache();
说明
- 这样一个简单的缓存类我们就实现了。是不是和很多框架中的代码非常类似。
- 子类只需要定义自己的实现就可以了,剩下的重复代码都让父类去完成,如果没有父类,它们都需要自己实现一个init()方法
- 当然,需要增加其它的实现类时,也只需要继承这个Cache父类后完成自己的实现就可以了,客户端面对这些实现类都能非常轻松,因为它们知道自己只需要先调用一下初始化方法可以使用这个类了,不管是哪一个实现类都是一样的
以上就是深入浅析PHP中的模板方法模式的详细内容,更多请关注毛票票其它相关文章!