最近在看《Thinking In UML大象》。看到里面讲接口设计的时候,举了“把大象放入冰箱”的例子。自己顺手就写了一下,用到了模板模式
从main方法开始
public static void main(String[] args) {
Refrige refrige = new Refrige();// 首先需要一个冰箱
Elephant elephant = new Elephant();// 然后需要一头大象
Job job = new JobHandler();
job.execute(refrige, elephant);// 最后把大象放入冰箱
}
Refrige和Elephant是简单的两个实体类,这里方便起见,就重写了toString
public class Refrige {
@Override
public String toString(){
return "海尔冰箱";
}
}
public class Elephant {
@Override
public String toString(){
return "大象";
}
}
Job是抽象类,其中定义了装大象的3步open, put, close,以及顺序执行这3步的方法execute
public abstract class Job {
public abstract void open(Refrige refrige);
public abstract void put(Elephant elephant);
public abstract void close();
public void execute(Refrige refrige, Elephant elephant){
System.out.print("Step 1: ");
this.open(refrige);// 第一步打开冰箱
System.out.print("Step 2: ");
this.put(elephant);// 第二步放入大象
System.out.print("Step 3: ");
this.close();// 第三步关闭冰箱
}
}
之后是具体实现装大象3步方法的子类JobHandler
public class JobHandler extends Job {
Refrige refrige;
Elephant elephant;
@Override
public void open(Refrige refrige) {
this.refrige = refrige;
System.out.println("打开 " + this.refrige);
}
@Override
public void put(Elephant elephant) {
this.elephant = elephant;
System.out.println("把 " + this.elephant + " 放入 " + this.refrige);
}
@Override
public void close() {
System.out.println("关闭 " + this.refrige);
}
}
这样就完成了”把大象放入冰箱“。
Step 1: 打开 海尔冰箱
Step 2: 把 大象 放入 海尔冰箱
Step 3: 关闭 海尔冰箱
其实主要就是要从接口的角度考虑问题吧(Job类)
具体的实现(JobHandler)可以根据具体的情况进行变更。