/**
* 抽象决策类
* @author Walker
*
*/
public abstract class Strategy {
public abstract void backupDatabase();
}
/**
* 具体策略类
* @author Walker
*
*/
public class StrategyA extends Strategy{
@Override
public void backupDatabase() {
System.out.println("策略A:逻辑备份");
}
}
public class StrategyB extends Strategy{
@Override
public void backupDatabase() {
System.out.println("策略B:冷备份");
}
}
/**
* 环境角色,给客户端调用
* @author Walker
*
*/
public class DBContext {
private Strategy s;
public DBContext(Strategy s) {
super();
this.s = s;
}
public void executeBackupDatabase() {
s.backupDatabase();
}
}
/**
* 代码中经常用if。。else。。来解决问题,这种硬编码的缺点是复用性差,有新需求时,要修改条件分支
* 策略模式定义了一系列算法,并将每个算法封装起来,让算法独立于使用它的客户而独立变化。
* @author Walker
*
*/
public class StrategyPattern {
public static void main(String[] args) {
DBContext context = new DBContext(new StrategyA());
context.executeBackupDatabase();
DBContext context1 = new DBContext(new StrategyB());
context1.executeBackupDatabase();
DBContext context2 = new DBContext(new StrategyC());
context2.executeBackupDatabase();
}
}