应用场景如: 缓存(文件、redis…),数据库操作(mysql,oracle,pgsql…)
1.策略模式
<?php
/**
* abstract class
*/
abstract class Strategy
{
// 算法方法
abstract public function AlgorithmInterface();
}
/**
* 算法a
*/
class ConcreteStrategyA extends Strategy
{
public function AlgorithmInterface()
{
echo "算法a实现\n";
}
}
/**
* 算法b
*/
class ConcreteStrategyB extends Strategy
{
public function AlgorithmInterface()
{
echo "算法b实现\n";
}
}
/**
* 算法c
*/
class ConcreteStrategyC extends Strategy
{
public function AlgorithmInterface()
{
echo "算法c实现\n";
}
}
/**
* 上下文context
*/
class Context
{
private $strategy;
function __construct($strategy)
{
$this->strategy = $strategy;
}
public function contextInterface()
{
$this->strategy->AlgorithmInterface();
}
}
$context = new Context(new ConcreteStrategyA());
$context->contextInterface();
$context = new Context(new ConcreteStrategyB());
$context->contextInterface();
$context = new Context(new ConcreteStrategyC());
$context->contextInterface();
2.策略模式和简单工厂结合
<?php
// 只需要修改上方的Context类
class Context
{
private $strategy;
function __construct($operation)
{
switch ($operation) {
case 'a':
$this->strategy = new ConcreteStrategyA();
break;
case 'b':
$this->strategy = new ConcreteStrategyB();
break;
case 'c':
$this->strategy = new ConcreteStrategyC();
break;
}
}
public function contextInterface()
{
return $this->strategy->AlgorithmInterface();
}
}
//客户端代码
$context = new Context('a');
$context->contextInterface();