Strategy策略模式又名政策(Policy)模式,是属于设计模式中对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类,并且这些类(算法)可以相互替换。Strategy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现。图象压缩系列算法实现(不同的算法分别对应一个类)也可以采用Strategy模式实现。其结构图如下:
下面以一个求职者投简历为例:
一个求职者可能投中英文简历,但并不是对所有的公司都投中英文简历,故需要一个策略来判断投什么简历。
简历(Resume)代码:
public interface Resume {
public void writeResume();
}
写中文简历代码:
public class ChineseResume implements Resume {
public void writeResume() {
System.out.println(" #### 编写中文简历");
}
}
写英文简历:
public class EnglishResume implements Resume {
public void writeResume() {
System.out.println(" #### 编写英文简历");
}
}
求职者本身:
public class JobSeeker {
private Resume resume;
public JobSeeker(Resume resume){
this.resume = resume;
}
public Resume getResume() {
return resume;
}
public void setResume(Resume resume) {
this.resume = resume;
}
public void postResume(){
resume.writeResume();
}
}
模拟求职者行为:
public class TestSeeker {
public static void main(String[] args) {
JobSeeker jobSeeker = new JobSeeker(new ChineseResume());
jobSeeker.postResume();
jobSeeker = new JobSeeker(new EnglishResume());
jobSeeker.postResume();
}
}
策略模式的缺点:
客户必须了解不同的Strategy:这是本模式潜在的一个缺点,其实客户要选择一个合适的Strategy就必须知道这些Strategy有何不同。这不可避免地向客户暴露具体的实现问题。