我对设计模式的理解:
多数开发人员应该知道设计模式这个东西;部分人知道23种设计模式;少数人能够熟练使用设计模式,极少数人精通设计模式。
其实23种设模式,其实只是入门,这就相当于你学英语,学会了26个英文字母,才能开始学习单词。同样23种设计模式,只是字母表,想要到精通的层次,要能够灵活的使用设计模式,灵活的组合设计模式。
设计模式是我短期计划中的一部分,我的文章致力于最快最简单的掌握每一个设计模式。
我的设计模式相关的文章,都会在开篇使用一句话,来描述一个设计模式!
该模式设计关键点
使用接口来声明算法,由类来实现这些接口,实现了这些接口的不同类称为不同的策略。
UML图
策略模式其实非常的简单,一个接口声明了某个算法,说我这个算法是用来干什么的。 而由具体的类,来实现这个接口。实现接口就要实现其全部的方法。
最大的好处,是解耦,更好的遵守开闭原则,写出更容易维护的代码。大家聊策略模式的时候都喜欢举不同等级的会员结账的例子,或者说商场做不同的活动,结账的例子。
比方说,商场今天对生活用品打了八折,对省生鲜打了五折,对快要过期的零食打了三折,今天是这样的活动,明天还不知道有什么活动。在这种情况下,程序员为了能够写出来易于维护易于扩展的代码。而想出来的一种手段。通过定义不同的计算方法,来完成这个需求。
简单的代码案例
注意我的案例中借用了spring 的bean容器管理功能
1. 定义一个接口
interface Strategy {
//计算方法
public Integer caculate(Integer money);
}
2. 实现类A
//具体策略类A
@component("ConcreteStrategyA")
class ConcreteStrategyA implements Strategy {
public Integer caculate(Integer money) {
// 根据不同的活动来进行不同的计算
return money * 0.8;
}
}
3 实现类B
//具体策略类B
@component("ConcreteStrategyB")
class ConcreteStrategyB implements Strategy {
public Integer caculate(Integer money) {
// 根据不同的活动来进行不同的计算
return money * 0.5;
}
}
4. 来灵活使用策略
@Service
public class CaculateService{
@Autowired
private Map<String, Strategy> caculateStrategy;
public Integer CaculateManey(Integer targetManey, String strategy){
return caculateStrategy.get(strategy).caculate(targetManey);
}
}
4. 如果想要增加不同的活动,则只需要定义不同的类来实现我们的接口。
另外在调用的时候传入不同的活动类型,就可以来进行计算。
入过不这样写的话,我们还要改CaculateService 这个类,通过写 if else 来实现添加不同的策略。