策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。
设计原则:
1、面向接口编程(面向抽象编程)
2、封装可变的东西
3、多用组合,少用继承
示例:
class Demo{
public static void main(String[] args) {
BaseService user = new UserService();
user.setISave(new FileSave());//可以相互替换使用。例如还可以:user.setISave(new NetSave());
user.add("user");
}
}
//把可变的行为抽象出来,定义、封装一系列算法
interface ISave{
public void save(String data);
}
class FileSave implements ISave{
public void save(String data) {
System.out.println("把数据保存到文件中..."+data);
}
}
class NetSave implements ISave{
public void save(String data) {
System.out.println("把数据保存到网络上..."+data);
}
}
//这样写对于BaseService类来说,具体保存到文件还是网络就没关系,只需要确定保存到哪个接口,但在类里要提供设置的方法。在真正用的时候用的是接口的save,不用关心接口是谁
abstract class BaseService{//客户
private ISave iSave;
public void setISave(ISave iSave) {
this.iSave = iSave;
}
public void add(String data) {
System.out.println("检查数据合法性...");
iSave.save(data);
System.out.println("数据保存完毕。");
}
}