策略模式

策略模式是指有一个策略类,不同的策略类实现不同的算法。

策略模式封装了变化,把具体算法用策略类包装起来。

封装变化面向对象的重要的思维方式

 

目录

定义:

源码实例:

类图

Context以及Strategy对象

Context设置原始Strategy

Context主动切换Strategy


策略模式,运用不同的策略类。用“算法”这个概念来抽象不同的策略类中的具体策略。

那么我具体要用到哪种算法呢,我先配置为不同的策略类。只改变配置不同的策略类这一个改变,就能调用的到不同的算法了。

背后具体的设计就是如下:

定义:

    策略模式中定义一系列算法的方法,这些算法都是完成相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了具体实现算法类与使用算法类之间的耦合。策略模式在具体算法实现 和 使用者增加了策略类——把不同的算法放入到不同的策略类中,切换不同的算法,只需要切换不同的策略即可。(具体源码中的例子就是切换不同的tool就行了)

 

 

 

源码实例:

通过分析源码,对应上图中的元素,画出类图。

类图

Context以及Strategy对象

客户Context :    sample 以及 sample派生类(Sample_SoloMesh,Sample_TileMesh,Sample_TempObstacles,包含一个指向【策略对象】的指针 m_tool

策略对象Strategy : sampleTool 以及 sampleTool派生类 (NavMeshTesterTool,OffMeshConnectionTool,ConvexVolumeTool,CrowdTool)

ContextInterfacesamplehandleUpdate

AlgorithmInterfacesampleTool handleUpdate

 

Context设置原始Strategy

具体客户(Sample_SoloMesh, Sample_TileMesh, Sample_TempObstacles) 创建的时候设定其对应的【策略对象】

比如 Sample_SoloMesh 的构造函数默认设置m_toolNavMeshTesterTool

 

Context主动切换Strategy

具体客户还可以调用setTool动态切换使用其他【策略对象】。

Sample的 handleUpdate 委托给 m_tool 的 handleUpdate。当m_tool改变的时候,其handleUpdate的相应的改变了。(ps:handleStep等函数类似)

 

可以对比看下状态模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ivy_0709

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值