状态变化模式
典型模式
- State
- Memento
1 state
目的是应对对象状态变化,行为也要随之变化,保持对象操作和状态转化之间的松耦合
State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。
2 Memento
Memento捕获对象的状态,在不破坏封装性的前提下,可以用于以后对象状态的恢复。关键是把状态封装成一个新对象,并与目标对象的接口相匹配。
"数据结构"模式
典型模式
- Composite
- Iterator
- Chain of Resposiblility
1 Composite
定义:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)。
Leaf 和 Composite 有共同的基类,leaf是一种具体的实现,而Composite可以看出是同一类型的特殊容器。在Linux的文件系统中,普通文件是leaf,而目录文件是Composite,目录文件上记录的有当下目录的文件,也有下一层次的目录文件,组成了树状的文件结构。
2 Iterator
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。
这是一种间接访问而不破坏封装性的方式,与C++ STL的迭代器不同的是Iterator 使用的是面向对象的编程思想,而STL的迭代器是通过完整的范式编程体系,六大部件相互工作实现的,是C++ 精妙的地方,Iterator则显得有些过时了。
3 Chain of Resposibility
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
第十三周的作业中使用了责任链的方案,把所有图形的handler 串在一个链上,若要画出不同图形的组合,构建好各自图形的请求,交于责任链处理,必然有一个节点可以实现所要求的图形,输入多个请求,即可以画出多种图形的组合。这样图形和相应的handler都是可以扩展的,保持请求发出者和操作实行的松耦合。