策略模式应该是Java设计模式中最简单的一种模式,
它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑。
其实具体的说,它也是基于面向接口编程的思想,通过定义不同的实现类逻辑来做到的。
策略模式接口定义
比方说现在需要一个计算逻辑,对两个输入的数进行某种运算,
这里可以定义接口为:
策略模式实现
现在如果需要实现加法和算法,只需要定义两个对应的类,实现接口就可以
最后一步,策略模式需要一个策略类,
划重点
到这里你可能会有些疑问,策略模式跟简单工厂模式有什么区别?
都是定义个接口,往一个Context/Factory类里传东西,然后执行抽象好的接口,
从代码层次来说一模一样啊?
这里来回顾下之前说的工厂模式,
设计模式之工厂模式
这里重点关注一个地方,
我们往 Context/Factory 的构造方法里穿的东西不同
· 策略模式
我们传的是构造好的执行对象, AddCaculator()
· 工厂模式
这里传的是不是对象,而是定义好的参数,比如 "add"
他俩的区别在于,策略模式需要调用者创建好执行逻辑的对象,而工厂模式只需要告诉工厂我们要创建什么。
这么说可能不够具体,你可以这么想象,
我们去了一个咖啡厅,想喝一杯咖啡,
策略模式的咖啡厅会说
想喝卡布奇诺还是拿铁,自己调好咖啡和奶的比例拿给他,他帮你在咖啡机上磨好装杯子里给你
工厂模式的咖啡厅会说
跟他说要卡布奇诺还是拿铁就行,你不需要关心咖啡豆的比例和制作过程,他帮你做好装杯子里给你
总结
策略模式跟工厂模式其实思想非常接近,
都是通过接口来去耦合,
而两者的区别也比较容易理解,
策略模式侧重于让调用者控制逻辑的实现,
工厂模式则侧重于让调用者不关心具体的逻辑,只关心需要用什么东西。