状态模式 墨蓝 2021-11-27 06:14 268阅读 0赞 个人总结,除非非常符合情景,否则使用的也不多。因为会宁愿修改代码也不会去实现状态模式。 有一点像命令模式,虽然目的不同,一个为了存储,一个为了变化。但是根本手段是一致。把方法提出来放到类中,并且都需要发出这个动作的主体。总的指导思想是一致的。 //没太看懂,恩,直接写例子吧。根据这个模式的说明,大量增加状态时,会需要状态模式,自己看看是否会迭代出状态模式 //v1:建一个机器人,有3个状态,开心,平静,愤怒。 有2个行为,吃饭和睡觉。 //v2:试图增加状态,并符合开闭状态。 //看网上很多例子。各不一样。但是根本意思是一样。 //如这里,机器人有不同的情绪,那么吃饭的结果完全不同。如果情绪更丰厚。那么吃饭的结果就太多了。 //干脆把吃饭作为一个类,那么有高兴吃饭类,平静吃饭类。生气吃饭类。等等,想加什么加什么。当然必须把机器人传递给吃饭类,因为毕竟吃饭类是要知道谁吃饭吧。 //个人总结,除非非常符合情景,否则使用的也不多。因为会宁愿修改代码也不会去实现状态模式。 // 有一点像命令模式,虽然目的不同,一个为了存储,一个为了变化。但是根本手段是一致。把方法提出来放到类中。总的指导思想是一致的。 public class MyState { public void Run() { Robot robot=new Robot("v1"); robot.changeState(0); robot.eat(); robot.sleep(); robot.changeState(2); robot.eat(); } public void Runv2() { Robotv2 robot2=new Robotv2("v2"); happy happystats=new happy(); Calm calmstats=new Calm(); robot2.eat(); robot2.sleep(); calmstats.eat(robot2); } //region v1 ,存在增加状态时,必须需改函数内部,违反开闭原则。 public class Robot { private int MState=0;//0:calm 1:happy 2:angry. private String mName; public Robot(String name) { mName=name; } public void changeState(int ss) { MState=ss; } public void eat() { if(MState==0) { LSComponentsHelper.LS_Log.Log_INFO(mName+"eat half"); } else if(MState==1) { LSComponentsHelper.LS_Log.Log_INFO(mName+"eat all"); } else if(MState==2) { LSComponentsHelper.LS_Log.Log_INFO(mName+"eat nothing"); } // else if(MState==3) // { // LSComponentsHelper.LS_Log.Log_INFO(mName+"eat nothing"); // } } public void sleep() { if(MState==0) { LSComponentsHelper.LS_Log.Log_INFO(mName+"sleep slowly"); } else if(MState==1) { LSComponentsHelper.LS_Log.Log_INFO(mName+"sleep fast"); } else if(MState==2) { LSComponentsHelper.LS_Log.Log_INFO(mName+"sleep ,hardly"); } // else if(MState==3) // { // LSComponentsHelper.LS_Log.Log_INFO(mName+"eat nothing"); // } } } //endregion //region 常见的对修改关闭的手段,就是把要修改的部分放到一个类中,并让他们继承某个接口。那么原来需要修改的地方。只要使用接口就可以。变化可以由增加新类来实现。 //把增加的内部判断,改为了到外部增加新类 public class Robotv2 { private int MState=0;//0:calm 1:happy 2:angry. private String mName; public Robotv2(String name) { mName=name; } public void changeState(int ss) { MState=ss; } public void eat() { MState=0; LSComponentsHelper.LS_Log.Log_INFO(mName+"start eat"); MState=1;//初始状态,吃完东西会变开心。 } public void sleep() { MState=0; LSComponentsHelper.LS_Log.Log_INFO(mName+"start sleep"); MState=2;//初始状态,睡觉,会变不开心. } } public interface IAction { public void eat(Robotv2 robotv2); public void sleep(Robotv2 robotv2); } public class happy implements IAction { @Override public void eat(Robotv2 robotv2) { LSComponentsHelper.LS_Log.Log_INFO(robotv2.mName+"eat all"); robotv2.changeState(2); } @Override public void sleep(Robotv2 robotv2) { LSComponentsHelper.LS_Log.Log_INFO(robotv2.mName+"sleep fast"); } } public class Calm implements IAction { @Override public void eat(Robotv2 robotv2) { LSComponentsHelper.LS_Log.Log_INFO(robotv2.mName+"eat half"); robotv2.changeState(1); } @Override public void sleep(Robotv2 robotv2) { LSComponentsHelper.LS_Log.Log_INFO(robotv2.mName+"sleep slowly"); } } //endregion } 转载于:https://www.cnblogs.com/lsfv/p/11145020.html
相关 状态模式(状态机) 以前写状态机,比较常用的方式是用 if-else 或 switch-case,高级的一点是函数指针列表。最近,看了一文章[《c语言设计模式–状态模式(状态机)》][c](来源: 忘是亡心i/ 2023年02月20日 07:08/ 0 赞/ 108 阅读
相关 状态模式 //表示状态的接口类 public interface State { void smile(); void cry(); voi r囧r小猫/ 2022年06月10日 05:14/ 0 赞/ 182 阅读
相关 状态模式 转载请注明链接:[https://blog.csdn.net/feather\_wch/article/details/78647901][https_blog.csdn.ne 偏执的太偏执、/ 2022年06月05日 12:15/ 0 赞/ 201 阅读
相关 状态模式 1.使用场景: 常见的应用场景有线程对象各个状态之间的切换或者各种账号状态的管理等 2.UML表示 状态模式中主要有以下的几大角色: 2.1Context:环 淩亂°似流年/ 2022年05月31日 09:26/ 0 赞/ 181 阅读
相关 状态模式 状态模式 一、概述 1. 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 2. 结构 Context环境类:环境类中维护 短命女/ 2022年04月17日 00:18/ 0 赞/ 200 阅读
相关 状态模式 前言 状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过 水深无声/ 2021年12月09日 00:49/ 0 赞/ 255 阅读
相关 状态模式 个人总结,除非非常符合情景,否则使用的也不多。因为会宁愿修改代码也不会去实现状态模式。 有一点像命令模式,虽然目的不同,一个为了存储,一个为了变化。但是根本手 墨蓝/ 2021年11月27日 06:14/ 0 赞/ 269 阅读
相关 状态模式 20.状态模式 核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线、隐身、忙碌等,每个状态对应不同的操作,而且你的 男娘i/ 2021年09月17日 00:08/ 0 赞/ 300 阅读
相关 状态模式 一 不使用状态模式 1 需求 通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如 比眉伴天荒/ 2021年07月24日 14:05/ 0 赞/ 419 阅读
相关 状态模式 状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态... 小灰灰/ 2020年06月13日 05:49/ 0 赞/ 722 阅读
还没有评论,来说两句吧...