通过抽象类定义共有业务流程,其中的差异化部分由抽象方法在实例化时候创建子类时完成
代码:
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 模板方法设计模式
*/
public abstract class TemplateModeTest<T> {
private T t;
public TemplateModeTest(T t) {
this.t = t;
}
public void say(){
String user = getUser(t);
String say = getSay(t);
System.out.println(user + ": " + say);
}
public abstract String getUser(T t);
public abstract String getSay(T t);
public static void main(String[] args) {
TemplateModeTest<Person> person = new TemplateModeTest<Person>(new Person("zhangsan", "模板方法设计模式")) {
@Override
public String getUser(Person person) {
return person.getUsername() + "先生说";
}
@Override
public String getSay(Person person) {
return "我演讲的内容是" + person.getSay();
}
};
person.say();
TemplateModeTest<Table> table = new TemplateModeTest<Table>(new Table("八仙桌", "三个苹果")) {
@Override
public String getUser(Table table) {
return "在" + table.getKind() + "上";
}
@Override
public String getSay(Table table) {
return "放着" + table.getDesc();
}
};
table.say();
}
}
@Data
@AllArgsConstructor
class Person {
private String username;
private String say;
}
@Data
@AllArgsConstructor
class Table {
private String kind;
private String desc;
}
运行,输出:
zhangsan先生说: 我演讲的内容是模板方法设计模式
在八仙桌上: 放着三个苹果