状态模式和策略模式的关系-清华大学计算机考研经验贴.

时间:2024-07-15 10:06:30
【文件属性】:

文件名称:状态模式和策略模式的关系-清华大学计算机考研经验贴.

文件大小:8.5MB

文件格式:PDF

更新时间:2024-07-15 10:06:30

javasc

16.6 状态模式的优缺点 到这里我们已经学习了两个状态模式的例子,现在是时候来总结状态模式的优缺点了。状态 模式的优点如下。  状态模式定义了状态与行为之间的关系,并将它们封装在一个类里。通过增加新的状态 类,很容易增加新的状态和转换。  避免 Context 无限膨胀,状态切换的逻辑被分布在状态类中,也去掉了 Context 中原本过 多的条件分支。  用对象代替字符串来记录当前状态,使得状态的切换更加一目了然。  Context 中的请求动作和状态类中封装的行为可以非常容易地独立变化而互不影响。 状态模式的缺点是会在系统中定义许多状态类,编写 20 个状态类是一项枯燥乏味的工作, 而且系统中会因此而增加不少对象。另外,由于逻辑分散在状态类中,虽然避开了不受欢迎的条 件分支语句,但也造成了逻辑分散的问题,我们无法在一个地方就看出整个状态机的逻辑。 16.7 状态模式中的性能优化点 在这两个例子中,我们并没有太多地从性能方面考虑问题,实际上,这里有一些比较大的优 化点。  有两种选择来管理 state 对象的创建和销毁。第一种是仅当 state 对象被需要时才创建并 随后销毁,另一种是一开始就创建好所有的状态对象,并且始终不销毁它们。如果 state 对象比较庞大,可以用第一种方式来节省内存,这样可以避免创建一些不会用到的对象 并及时地回收它们。但如果状态的改变很频繁, 好一开始就把这些 state 对象都创建出 来,也没有必要销毁它们,因为可能很快将再次用到它们。  在本章的例子中,我们为每个 Context 对象都创建了一组 state 对象,实际上这些 state 对象之间是可以共享的,各 Context 对象可以共享一个 state 对象,这也是享元模式的应 用场景之一。 16.8 状态模式和策略模式的关系 状态模式和策略模式像一对双胞胎,它们都封装了一系列的算法或者行为,它们的类图看起 图灵社区会员 balabala233 专享 尊重版权


网友评论