recast&detour源码中的设计模式
定义:
策略模式定义了算法族,分别封装起来,让他们之间可以相互替换。此模式让算法的变化独立于使用算法的客户。
源码中
客户Context: sample 以及 sample派生类,包含一个指向【策略对象】的指针 m_tool
策略对象Strategy: sampleTool 以及 sampleTool派生类(算法族)
具体客户(Sample_SoloMesh, Sample_TileMesh, Sample_TempObstacles) 创建的时候设定其对应的【策略对象】(具体的SampleTool, 比如NavMeshTesterTool)。
Sample_SoloMesh 的构造函数默认设置m_tool为NavMeshTesterTool。
具体客户还可以调用handleTools动态切换使用其他【策略对象】。
Sample的 handleUpdate 委托给 m_tool 的 handleUpdate。当m_tool改变的时候,其handleUpdate的相应的改变了。handleStep等函数类似。
SampleTool 的设计 应用了 多用组合,少用继承 的设计原则。