新闻资讯

    状态机模式,是在构造高层系统时比较常用的一种设计模式。它的基本思想是,将同一系统的不同状态对象化,不同状态的对象分别处理系统在不同状态下业务问题。以最常用的播放机为例来说,就是将Playc语言状态机设计模式,Stop,Pause这些不同的状态,声明为class Play,class Stop,class Pause等,然后分别在类内部去处理不同状态下对按键事件的反馈和状态间的切换等。

    有关状态模式的一个基本实现,网上有较多例子,我就不赘述了,可以参考以下两篇文件:

    Java设计模式中的状态机:https://www.cnblogs.com/of-fanruice/p/11565679.html
    C++设计模式中的状态机:https://blog.csdn.net/fanyun_01/article/details/51791086

    我在这里要说的,是在这些实例中忽视的一个重要问题:状态的资源释放。

    网上几乎所有的状态机C++实现,都没有考虑废弃状态的资源释放问题。当一新状态产生,直接替换了旧状态,而未对旧状态进行处理。这样的方式c语言状态机设计模式,在Java中是没有问题的,因为Java会在对象没有调用者时,由虚拟机垃圾回收机制,自动地处理掉废弃状态对象。但C++显然没有这样的机制。

    同时,我们又不能简单在()时,释放当前状态。因为此时,我们仍然处于当前对象的执行代码中,如果释放掉了当前状态对象,若编写者在()后,又访问了当前状态对象的成员,就可能出现不可预期的错误,导致系统崩溃。

    所以,我们需要实现一个类似垃圾收集的机制,用于处理废弃对象。当一个对象成为废弃对象时,只是将它加入GC中,而并不马上释放。只有在确认了系统状态已安全后,才调用GC的释放处理方法,进行垃圾处理。

    (未完待续)

网站首页   |    关于我们   |    公司新闻   |    产品方案   |    用户案例   |    售后服务   |    合作伙伴   |    人才招聘   |   

地址:北京市海淀区    电话:010-     邮箱:@126.com

备案号:冀ICP备2024067069号-3 北京科技有限公司版权所有