本文来源于码农田小齐
变化用抽象,固定用模板
学习下责任链模式
先是定义需求,皇帝去河北,陕西玩,由当地的官员接待,然后如果想增加地方怎么办
先顶一个官员类
public abstract class Official {
protected String title;
protected abstract void server(Emperor emperor);
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Official{" +
"title='" + title + '\'' +
'}';
}
}
在定义个皇帝类
public class Emperor {
private static final Emperor INSTANCE = new Emperor("乾隆");
private final String name;
public Emperor(String name) {
this.name = name;
}
public static Emperor getINSTANCE() {
return INSTANCE;
}
public void play(Official official,String place) {
System.out.println(official.getTitle() +
"安排" + name +"皇帝游览了" +
place);
}
}
然后实现官员类,这里举一个例子
public class HebeiOfficial extends Official {
public HebeiOfficial() {
this.title = "河北总督";
}
@Override
protected void server(Emperor emperor) {
emperor.play(this,"避暑山庄");
}
}
最后是启动类
public class PrimeMinister {
private static List<Official> list = new ArrayList<>();
public static void main(String[] args) {
list.add(new HebeiOfficial());
list.add(new ShanxiOfficial());
//Emperor emperor = new Emperor("啊飒飒飒飒");
Emperor emperor = Emperor.getINSTANCE();
start(list, emperor);
}
private static void start(List<Official> officials, Emperor emperor){
for (Official official :officials) {
official.server(emperor);
}
}
}