首页 > 代码库 > 学习日记之状态模式和Effective C++

学习日记之状态模式和Effective C++

状态模式(State):当一个对象内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。


(1),状态模式主要负责解决的是当控制一个对象转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

(2),状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

(3),将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。

(4),状态模式通过把各种状态转移逻辑分布到 State 的子类之间,来减少相互间的依赖。

(5),当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式。


Effective C++:

为“异常安全”而努力使值得的

1:异常安全函数(Exception-safe functions)提供以下三个保证之一:

(1),基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效状态下。没有任何对象或者数据结构会因此而败坏,所以对象都处于一种内部前后一致的状态。然而程序的现实状态恐怕不可预料。

(2),强烈保证:如果异常被抛出,程序状态不改变。调用这样的函数需要这样认为:如果函数成功,就是完全成功,如果函数失败,程序会恢复到“调用函数之前”的状态。

(3),不抛掷保证:承诺绝不抛出异常,因为他们总是能够完成他们原先承诺的功能。作用于内置类型身上的所以操作都提供 nothrow 保证。这是异常安全码中一个必不可少的关键基础材料。


2:请记住

(1),浴场安全函数即使发生异常也不会泄露资源或允许任何数据结构败坏。这样的函数区分为三种保证:基本型、强烈型、不抛异常型。

(2),“强烈保证“往往能够以 copy-and-swap 实现出来,但”强烈保证“并非对所有函数都可实现或具备现实意义。

(3),函数提供的”异常安全保证“通常最高只等于其所调用之各个函数的异常安全保证中的最弱者。