php、java实现状态模式
2017-05-04 10:01
302 查看
个人理解:根据事物状态的不同,导致其行为的不同,切换状态,相应的行为也会发生变化
类图
![](http://img.blog.csdn.net/20170504092124338?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmVucGVuZ2RkeHg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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(); } }
相关文章推荐
- php实现设计模式之 状态模式
- 大话设计模式之状态模式(java版实现)
- php,java实现策略模式
- 设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 状态模式(State Pattern) - Java实现
- php,java实现备忘录模式
- 设计模式之第21章-状态模式(Java实现)
- php,java实现代理模式
- php,java实现组合模式
- php,java实现中介者模式
- Java 实现状态(State)模式
- Java设计模式菜鸟系列(十三)建模和实现状态模式
- php,java实现模板方法模式
- DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
- php,java实现观察者模式
- dea_des ecb模式 java php c#实现
- 学习php设计模式 php实现状态模式
- 设计模式--状态模式(分布式中间件熔断器Java实现)
- php、java实现单例模式
- php,java实现访问者模式
- php,java实现门面(外观)模式