abstract class AbstractClass
{
public function TemplateMethod()
{
$this->PrimitiveOperation1();
$this->PrimitiveOperation2();
}
abstract public function PrimitiveOperation1();
abstract public function PrimitiveOperation2();
}
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;
}
}
具体的实现类,它们只需要去实现父类所定义的算法就可以了。
$c = new ConcreteClassA();
$c->TemplateMethod();
$c = new ConcreteClassB();
$c->TemplateMethod();
<?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();
abstract class AbstractClass
{
public function TemplateMethod()
{
$this->PrimitiveOperation1();
$this->PrimitiveOperation2();
}
abstract public function PrimitiveOperation1();
abstract public function PrimitiveOperation2();
}
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;
}
}
具体的实现类,它们只需要去实现父类所定义的算法就可以了。
$c = new ConcreteClassA();
$c->TemplateMethod();
$c = new ConcreteClassB();
$c->TemplateMethod();
<?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();