同一个行为,用不同的方案可以去完成,这个方案我们可以叫他策略或者规则;通过对方案一个个的独立封装,结构更清晰,而且可以消除条件语句;这种模式就是用来封装算法的,比如在不同时间使用不同的业务规则;
简单结构:
- 一个基础类:可以是抽象类也可以是接口
- 多个策略(算法或规则)类:继承上诉基础类
- 一个能判断使用哪一个策略的Context类:在这里调用相应的策略对象,这个类;与工厂类比较相似
举个栗子
<?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();