您的位置:首页 > 编程语言 > PHP开发

php、java实现状态模式

2017-05-04 10:01 302 查看
个人理解:根据事物状态的不同,导致其行为的不同,切换状态,相应的行为也会发生变化

类图



php实现

abstract class Status
{
protected $context;

public function setContext($context)
{
$this->context = $context;
}

public abstract function handle1();

public abstract function handle2();

}

class ConcreateStatus1 extends Status
{
public function handle1()
{
echo 'ConcreateStatus1 handle1';
}

public function handle2()
{
$this->context->setCurrentStatus($this->context->concreteStatus2);
$this->context->handle2();
}
}

class ConcreateStatus2 extends Status
{
public function handle1()
{
$this->context->setCurrentStatus($thisi->context->concreteStatus1);
$this->context->handle1();
}

public function handle2()
{
echo 'ConcreateStatus2 handle2';
}
}

class Context
{
public $concreteStatus1;
public $concreteStatus2;

private $currentStatus;

public function setCurrentStatus($status)
{
$this->currentStatus = $status;
$this->currentStatus->setContext($this);

}

public function __construct()
{
$this->concreteStatus1 = new ConcreateStatus1();
$this->concreteStatus2 = new ConcreateStatus2();
}

public function handle1()
{
$this->currentStatus->handle1();
}

public function handle2()
{
$this->currentStatus->handle2();
}
}

$context = new Context();
$context->setCurrentStatus(new ConcreateStatus1());
$context->handle1();
$context->handle2();


java实现

public abstract class Status {

protected Context context;

public void setContext(Context context){
this.context = context;
}

public abstract void handle1();

public abstract void handle2();
}


public class ConcreteStatus1 extends Status {
@Override
public void handle1() {
System.out.print("1");
}

@Override
public void handle2() {
context.setCurrentStatus(Context.concreteStatus2);
context.handle2();
}
}


public class ConcreteStatus2 extends Status {
@Override
public void handle1() {
context.setCurrentStatus(Context.concreteStatus1);
context.handle2();
}

@Override
public void handle2() {
System.out.print("2");
}
}


public class Context {

public final static ConcreteStatus1 concreteStatus1 = new ConcreteStatus1();
public final static ConcreteStatus2 concreteStatus2 = new ConcreteStatus2();
public Status currentStatus;

public void setCurrentStatus(Status status){
currentStatus = status;
currentStatus.setContext(this);
}

public void handle1(){
currentStatus.handle1();
}

public void handle2(){
currentStatus.handle2();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php java