以下是一个简单的 PHP 状态模式的示例:
<?php
// 状态接口
interface State {
public function handle(Context $context);
}
// 具体状态类1
class ConcreteState1 implements State {
public function handle(Context $context) {
echo "Handling state 1.\n";
$context->setState(new ConcreteState2());
}
}
// 具体状态类2
class ConcreteState2 implements State {
public function handle(Context $context) {
echo "Handling state 2.\n";
$context->setState(new ConcreteState1());
}
}
// 上下文类
class Context {
private $state;
public function __construct(State $state) {
$this->state = $state;
}
public function setState(State $state) {
$this->state = $state;
}
public function request() {
$this->state->handle($this);
}
}
// 客户端代码
$context = new Context(new ConcreteState1());
$context->request(); // 输出: Handling state 1.
$context->request(); // 输出: Handling state 2.
$context->request(); // 输出: Handling state 1.
在这个例子中,State 接口定义了状态的基本方法 handle。ConcreteState1 和 ConcreteState2 是具体的状态类,分别实现了不同的状态下的行为。
Context 类是上下文类,包含一个对当前状态的引用,并提供了一个用于触发状态改变的方法 request。客户端代码创建了一个具体的上下文对象,初始状态为 ConcreteState1,然后通过多次调用 request 方法触发状态的切换。
状态模式使得状态的变化对客户端透明,客户端不需要知道对象内部状态的变化,只需要调用上下文的方法即可。这有助于将复杂的状态机逻辑分解成各个状态类,使代码更加清晰和易于扩展。
转载请注明出处:http://www.pingtaimeng.com/article/detail/11961/PHP