设计模式之策略模式

所谓策略模式,就是说实现一件事情有多种算法。而客户端需要对这些算法进行选择。

常规做法有2种:

1.你可以把这些实现的算法,写到一个类里面,然后对外提供接口,调用你所需要的。可是。。。?

这有个明显的缺点就是,将来,你多了一种更好的算法,那么你必然要改变原来的这个类,需修改封装好的,不符合开闭原则。

2.用if...else判断来进行选择具体哪个算法,可是。。。?

这也有上面的问题,多了一种算法,你需要修改以前哪个算法的逻辑,增加if判断,不好维护,工作量大。

那怎么办???

策略模式,把你的算法封装成独立的子类,他们之间没任何关系,具体的选择由客户端决定。

所以当你有新算法的时候,继续另外写个新的子类,不需要改动别人以前写好的东西。

所以,在策略模式中,最大的特点就是,客户必须明确的知道,做一件事情,到底有哪些“策略”。举例说明:

1.要过年了,回家,是必须的。那么你怎么回家呢?

a.坐火车。。。

b.坐灰机。。。

c.步行回家。。。(你妹,你才步行回家)

这就是回家的一种策略选择,其实在这些策略里面,还有一种就是,坐汽车回家(因为刚开通到你家直达汽车,你却不知道有这回事)

所以,上面想说,同样的回家,其实有4种方式,而由于客户必须明确的知道,你要进行那种策略的选择,否则,你就会错过汽车回家这种策略。


2.就是算法里面的排序,因为排序有一大堆,冒泡,选择,交换等等,

当你用sort实现排序的时候,根据不同的实际情况,你需要制定不同的排序方法,假如你连冒泡的这种排序都不清楚,怎么做选择?

所以,明显的看出,策略模式对客户端进行了要求,必须很清楚的有哪些策略进行选择。


类似的可以抽象成下面的这种情况。



环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。
抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。
具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。

具体的代码看向这里:http://blog.csdn.net/chmask/article/details/2631485

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值