设计模式----策略模式

和工厂模式很像的一种设计模式,先看下定义:对一系列的算法定义,并将每一个算法封装起来,而且使他们可以相互替换。工厂模式是把工厂内部的操作封装起来,使用户不用关心内部实现,关心的结果,而策略模式,是把算法或者策略封装起来,是要判断具体是哪一种算法去实现,这和具体的使用场景有关。两种设计模式类似测试中的白盒子和黑盒子两种测试,重点不一样。

举一个商场例子,定义一个父类:


一个正常收费的:


一个打折的:


一个满减活动的:


子类重写父类的方法都是简单的,没有什么逻辑,重在理解策略模式。

声明策略模式的类和测试类:



根据初始化Strategy类传入的参数来选取具体实现的策略类。


这里和工厂模式不同的是在客户端需要用到的类个数不同,在工厂模式,先要调用operationFactory方法声明Animal类再去实现,而策略模式只需声明Strategy类就行,耦合度比工厂模式降低了,但以后如果增加新的优惠活动,还是需要改动Strategy类增加switch。

应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立
UML类图:图中线有问题,工具有点问题,后边再改


例子很简单,简单写简单看,有什么问题,大家一起探讨。

参考书籍 《大话设计模式》


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值