我是设计模式的新手,当我查看状态类图时,我发现它只是一个应用的多态性。它没有什么特别之处。我说错了吗?
发布于 2020-05-10 14:14:56
多态性是一种可用于实现OO建模的机制,称为状态模式。当使用state模式时,您有一个逻辑对象(它可能被实现为指向实现的指针),并且在其生命周期内-您可以基于其当前状态在实现之间切换它。每个状态都倾向于独立工作,因此您可以独立研究实现,以了解该状态下的行为。
您不必以这种方式使用多态性。例如,您可能有一个由工厂根据在进程启动期间读取的配置创建的逻辑对象,一旦创建,这些对象将保留其运行时类型,直到进程关闭并被销毁。或者,您可以有一个表示网络设备的基类,并使用与您的硬件匹配的实现,而不会在硬件执行不同的任务时更改运行时类型-在这种情况下,您也可以使用多态性而不是状态模式,即使一个实现(一个派生类型)可能会使用各种成员变量来跟踪网络设备的状态。
有些对象可能不会持续整个流程生命周期,但仍然不会更改实现-例如,一个简单的绘图程序可能允许您在不同的形状实现之间进行选择以放入图中,但是在选择了Circle之后-而不是让您将其更改为Square -您必须删除Circle并插入一个Square。圆形和正方形可能不是形状可以在其间切换的状态。在一些游戏中,它们可能是:也许Circle对象会转换为Square对象,以指示有关它的某些东西,例如当前的伤害等级,或爆炸前的剩余时间。因此,特定的实现是否用于State设计模式并不一定是多态派生关系所固有的-它可能与客户端代码更改相同逻辑对象的方式有关。
即使没有创建多个实现的意图,使用多态性也并不少见-它可以类似于C++中的pImpl习惯用法,被称为“编译防火墙”,主要是为了缩短构建时间。尽管如此,有些人只是喜欢使用抽象类来设计整个系统,无论是否需要,在任何地方都使用多态性。
状态模式倾向于用于TCP连接的回调处理之类的事情-您可以在只具有与响应或连接事件相关的行为的状态之间进行转换,这使得代码更易于理解和维护。
https://stackoverflow.com/questions/61696108
复制相似问题