php、java实现状态模式

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

类图
这里写图片描述

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值