《Head First设计模式》阅读笔记.第八章
1.模板方法(Template Method)模式部分
----设计谜题解答----
// 导游public abstract class Guide { public final void leadTour() { this.buyTickets(); if (needRest()) {// 钩子 this.bookingHotel(); } this.conveneVisitors(); this.goToScenicSpot(); this.visit(); if (needRest()) {// 钩子 this.sleep(); } this.getBack(); } // 购买旅行票 public abstract void buyTickets(); // 预定旅店 public abstract void bookingHotel(); // 召集游客 public void conveneVisitors() { System.out.println("Convening visitors."); } // 前往景点 public void goToScenicSpot() { System.out.println("Go to the scenic spot."); } // 参观 public void visit() { System.out.println("Visit the scenic spot."); } // 住宿 public void sleep() { System.out.println("Have a rest."); } // 返回 public abstract void getBack(); // 是否需要住宿 public boolean needRest() { return true; }}// 北京一日游导游public class BeiJingGuide extends Guide { @Override public void buyTickets() { System.out.println("Buy bus tickets."); } @Override public void bookingHotel() { // 因为不需要住宿,所以这里什么都不做 } @Override public void getBack() { System.out.println("Get back by bus."); } // 覆盖钩子,取消住宿 @Override public boolean needRest() { return false; }}// 海南三日游导游public class HaiNanGuide extends Guide { @Override public void buyTickets() { System.out.println("Buy plane tickets."); } @Override public void bookingHotel() { System.out.println("Booking HaiNan Hotel."); } @Override public void getBack() { System.out.println("Get back by air."); }}