Dalam artikel sebelumnya "Fahami corak fasad dalam PHP dalam satu artikel " kami memperkenalkan corak fasad dalam PHP Artikel ini akan membawa anda memahami corak kaedah templat dalam corak reka bentuk PHP.
Corak kaedah templat juga merupakan salah satu corak yang sering kita gunakan secara tidak sengaja. Model ini adalah tafsiran warisan yang terbaik. Apabila terdapat tindakan berulang dalam subkelas, ia diekstrak dan diletakkan dalam kelas induk untuk pemprosesan bersatu Ini adalah penjelasan yang paling mudah dan paling popular tentang corak kaedah templat. Sama seperti apabila kita biasanya melakukan projek, proses setiap projek sebenarnya adalah sama, termasuk penyelidikan, pembangunan, ujian, penggunaan dan proses dalam talian. Dalam setiap projek, pelaksanaan proses ini tidak akan sama. Proses ini seperti kaedah templat, membolehkan kita berkembang mengikut proses ini setiap masa.
Takrifan GoF: Takrifkan rangka algoritma dalam operasi, sambil menangguhkan beberapa langkah ke subkelas . TemplateMethod membenarkan subkelas untuk mentakrifkan semula langkah-langkah tertentu algoritma tanpa mengubah struktur algoritma.
Rajah kelas GoF
Pelaksanaan kod
abstract class AbstractClass { public function TemplateMethod() { $this->PrimitiveOperation1(); $this->PrimitiveOperation2(); } abstract public function PrimitiveOperation1(); abstract public function PrimitiveOperation2(); }
Tentukan kelas abstrak dengan kaedah templat TemplateMethod(), di mana kita panggil kaedah operasi algoritma. Kaedah abstrak algoritma ini dilaksanakan dalam subkelas.
class ConcreteClassA extends AbstractClass { public function PrimitiveOperation1() { echo '具体类A实现方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具体类A实现方法2', PHP_EOL; } } class ConcreteClassB extends AbstractClass { public function PrimitiveOperation1() { echo '具体类B实现方法1', PHP_EOL; } public function PrimitiveOperation2() { echo '具体类B实现方法2', PHP_EOL; } }
Kelas pelaksanaan khusus, mereka hanya perlu melaksanakan algoritma yang ditakrifkan oleh kelas induk.
$c = new ConcreteClassA(); $c->TemplateMethod(); $c = new ConcreteClassB(); $c->TemplateMethod();
Dalam panggilan pelanggan, subkelas dijadikan instantiated, tetapi kaedah templat kelas induk yang diwarisi oleh subkelas dipanggil. Panggilan algoritma bersatu boleh dicapai.
Kod penuh: https://github.com/zhangyue0503/designpatterns-php/blob/master/20.template-method/source/template-method.php
Instance
Kod sumber penuh: https://github.com/zhangyue0503/designpatterns-php / blob/master/20.template-method/source/template-method-cache.php
<?php abstract class Cache { private $config; private $conn; public function __construct() { $this->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();
Alamat asal: https://juejin.cn/post/6844903989348139021 Pengarang : Pengurus projek tegar Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Analisis mendalam tentang corak kaedah templat dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!