php、java实现状态模式

来源:互联网 发布:安卓手机上的编程软件 编辑:程序博客网 时间:2024/06/03 21:24

个人理解:根据事物状态的不同,导致其行为的不同,切换状态,相应的行为也会发生变化

类图
这里写图片描述

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();    }}
0 0
原创粉丝点击