Command--对象行为型模式
- 抽象出待执行的动作以参数化某对象
- 在不同的时刻指定、排列和执行请求。
- 支持取消操作。
- 支持修改日志。
- 用构建在原语操作上的高层操作构造一个系统。
- Command模式将调用操作的对象和知道如何实现该操作的对象解藕。
- Command是头等的对象。它们可以像其他的对象一样被操纵和扩展。
- 你可将多个命令装配成一个符合命令
- 增加新的Command很容易,因为这无需改变已有的类。
- 一个命令对象应达到何种只能程度
- 支持取消(undo)和重做(redo)
- 避免取消操作过程中的错误积累
- 使用C++模板
Template method----类行为模式
- 一次性实现一个算法的部分,并将可变的行为留给子类来实现。
- 各子类中的公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
- 控制子类扩展。
- 使用C++访问控制,一个模板方法调用的原语操作可以被定义为保护成员。
- 尽量减少原语操作
- 命名约定
- 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法
- 需要使用一个算法的不同变体。
- 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
- 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形势出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句
- Strategy和Context相互作用以实现选定的算法。当算法被调用时,Context可以将算法所需要的所有数据都传递给该Strategy。或者,Context可以将自身作为一个参数传递给Strategy操作。这就让Strategy在需要时可以回调Context。
- Context将它的客户的请求转发给它的Strategy。客户通常创建并传递一个ConcreteStrategy对象给该Context;这样,客户仅与Context交互。通常有一系列的ConcreteStrategy类可供客户选择。
- 相关算法系列
- 一个替代继承的方法
- 消除一些条件语句
- 实现的选择
- 客户必须了解不同的Strategy
- Strategy和Context之间的通信开销
- 增加了对象数目
- 定义Strategy和Context接口
- 将Strategy作为模板参数
- 使Strategy对象成为可选的