策略模式
如果解决一件事情有很多种方法(算法,策略),用户根据不同的需求去选择不同的方法。这个时候会用到策略模式。我是通过Head First这本书学习的设计模式,策略模式被看做为整本书的入门章节,可以看出策略模式在一定的意义上还是比较好理解的。
例子
举一个现实中的例子来说吧~
比如我们上完课,老师让交报告,完成报告的方式有几种,手写报告、打印报告、演讲报告。对于这个例子我们怎样用策略模式实现呢?
设计类
差一句嘴,设计模式的原则:一定是面向接口编程,而非面向实现编程。
首先是设计接口类:
public interface IReport{
public void submit();
}
然后是实现三种提交方式:
public class HandReportImpl implements IReport{
@Override
public void submit(){
//手写报告,直接提交
}
}
public class PrintReportImpl implements IReport{
@Override
public void submit(){
//打印报告,再提交
}
}
public class SpeechReportImpl implements IReport{
@Override
public void submit(){
//上台演讲
}
}
然后就是我们要上的这门课了~
public class DesignPattern{
private IReport report;
public DesignPattern(){}
// 你可以直接选择通过哪种方式提交
public DesignPattern(IReport report){
this.report = report;
}
public void setReportWays(IReport report){
this.report = report;
}
public void submit(){
this.report.submit();
}
}
我们可以写一个main方法测试一下这个策略模式:
public static void main(String... args){
DesignPattern dp;
dp = new DesignPattern(new HandReportImpl());
dp.submit();
dp.setReportWays(new SpeechReportImpl());
dp.submit();
}
这样最简单的一个策略模式就完成了~~