我正在考虑使用 public function beforeFilter(){
parent::beforeFilter();
if($this->request->action != 'login' && !this->Session->check('User')){
$this->Flash->error(__('U probeert toegang te krijgen tot een beveiligde omgeving'));
return $this->redirect(array('controller' => 'users', 'action' => 'login'));
}
模式将代码中的大switch
语句转换为更易于管理的块。
我一直在Design Patterns book阅读它,并且还在查看教程点示例here。
该示例中的代码对我来说是错误的,因为作者正在State
之外调用State
功能。那是对的吗?
我的理解是,上下文应该是状态的包装器,并且Context
更改应该最有可能在每个State
对象中处理。否则它有点失败的目的吧?
点击谷歌搜索下面的设计模式书State
模式图:
我遇到了this example,这更符合我的想法。
因此,我认为Tutorials Point示例不正确,State
应该由状态本身更改,或者State
保持Object
并调用Context
{1}}?
是否有一个有效的案例,就像在Tutorials Point示例中一样?我自己也看不到,如果你这样做,你最终会得到另一个context.request()
或switch
声明。
答案 0 :(得分:1)
Yes you are correct the context only should have access to the state : the context as is the only client of the state .
Here is an example of implementation of the state in java.
答案 1 :(得分:1)
该示例中的代码对我来说是错误的,因为作者正在从Context之外调用State功能。这是正确的吗?
是的你是真的,给定的例子很难说明状态模式它更像是策略因为Context对象接收新的行为而不是自己调整它
...状态应该由状态本身改变,还是通过调用context.request()来保存Context的对象?
右。国家班级有责任设定下一个州的状态"上下文。可以使用State模式轻松创建状态机:
是否有一个有效的案例,就像在Tutorials Point示例中一样?我自己也看不到,如果你这样做,你最终只能使用另一个开关或if语句。
我认为有两个原因可以从外部更新上下文的状态: