跟策略方法类似,就是换方法
public class App {
public static void main(String[] args) {
HalflingThief thief=new HalflingThief(new HitAndRunMethod());
thief.steal();
thief.changeMethod(new SubtleMethod());
thief.steal();
}
}
public class HalflingThief {
private StealingMethod method;
public HalflingThief(StealingMethod method){
this.method=method;
}
public void steal(){
method.steal();
}
public void changeMethod(StealingMethod method){
this.method=method;
}
}
public class HitAndRunMethod extends StealingMethod{
@Override
protected String pickTarget() {
return "old goblin woman";
}
@Override
protected void confuseTarget(String target) {
System.out.println("Approch the "+target+" from behind");
}
@Override
protected void stealTheItem(String target) {
System.out.println("Grab the handbag and run away fast");
}
}
public abstract class StealingMethod {
protected abstract String pickTarget();
protected abstract void confuseTarget(String target);
protected abstract void stealTheItem(String target);
public void steal(){
String target=pickTarget();
System.out.println("The target has been chosen as "+target);
confuseTarget(target);
stealTheItem(target);
}
}
public class SubtleMethod extends StealingMethod {
@Override
protected String pickTarget() {
return "shop keeper";
}
@Override
protected void confuseTarget(String target) {
System.out.println("Approcch the "+target+" with tears running and hug him!");
}
@Override
protected void stealTheItem(String target) {
System.out.println("While in close contact grab the "+target+"'s wallet");
}
}
当替换整个方法时,就是换了个模板