博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
状态模式
阅读量:5754 次
发布时间:2019-06-18

本文共 946 字,大约阅读时间需要 3 分钟。

状态模式解析:主体类下面有一个状态切换方法,专门根据指令切换状态切换状态的本质,是把一个新的对象给主体类的一个成员属性

 

state = new TankState_Tank(); } //设置状态的方法,假设参数为玩家点击的键盘 public function setState($key) { //如果按了s if($key == 's') { $this->state = new TankState_Siege(); } //如果按了t elseif($key == 't') { $this->state = new TankState_Tank(); } } //坦克的攻击方法 public function attack() { //由当前状态自己来处理攻击 $this->state->attack(); }}//新造一辆坦克$tank = new Tank();//假设正好有个敌人路过,坦克就以普通模式攻击了$tank->attack();//架起坦克$tank->setState('s');//坦克再次攻击,这次是架起模式$tank->attack();//坦克回普通模式$tank->setState('t');//坦克再次攻击,这次是普通模式$tank->attack();?>
用途总结:状态模式可以将和状态相关的行为和属性封装,除了切换状态时,其它地方就不需要大量的判断当前状态,只要调用当前状态的方法等。实现总结:用一个接口规范状态类需要实现的方法,比如上面的TankState规定了attack()。把各个状态封装成类,将不同状态下的不同方法放入各自的状态类,比如上面的攻击方法,同时所有的状态执行接口。原来的事务类,比如上面的Tank类,只负责状态切换,一旦需要某一个方法的调用,只要交给当前状态就可以了。

 

转载于:https://www.cnblogs.com/jiufen/p/5026274.html

你可能感兴趣的文章
如何成为一个C++高级程序员
查看>>
ant android 打包签名和渠道
查看>>
一个简单的接口,被调用并同步给出响应的方法
查看>>
Hadoop序列化与压缩
查看>>
由“男怕入错行”说开去
查看>>
CGImageSource对图像数据读取任务的抽象
查看>>
我的友情链接
查看>>
xss test
查看>>
也谈svn分支与合并
查看>>
显式锁(第十三章)
查看>>
LBS“他爹”GIS
查看>>
SCCM的证书配置PKI
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
springboot系列十 Spring-Data-Redis
查看>>
Confluence 6 注册外部小工具
查看>>
excel进行矩阵计算
查看>>