模版方法模式–旅游签证
题目
想要出国旅游,基本都要经过以下几个步骤:办护照、办签证、买票、到达。
但是目前有些国家对于中国人是免签的或者是落地签,所以去不同的国家旅行时的具体步骤会有所不同。
请用模板方法模式实现上述内容。(提示:免签时可以采用钩子方法)。
代码
TravelAbroad.java
package TemplatePattern1;
public abstract class TravelAbroad {
String name;//客户
String country;//国家
int days;//签证时间
public TravelAbroad(String name, String country, int days) {
this.name = name;
this.country = country;
this.days = days;
}
public final void Process(){
passport();
if (hook()){
Visa();
}
ticket();
arrive();
}
//钩子方法
public boolean hook(){
return true;
}
//办理护照
public final void passport(){
System.out.println(name+"已办理"+country+"护照");
}
//买票
public final void ticket(){
System.out.println(name+"已买好到达"+country+"的机票");
}
//到达
public final void arrive(){
System.out.println(name+"已到达"+country);
}
//办理签证
public abstract void Visa();
}
LandVisa.java
package TemplatePattern1;
public class LandVisa extends TravelAbroad{
public LandVisa(String name, String country, int days) {
super(name, country, days);
}
@Override
public void Visa() {
System.out.println(name+"已办理去往"+country+"的签证,签证期为"+days+"天");
}
}
NeedVisa.java
package TemplatePattern1;
public class NeedVisa extends TravelAbroad{
public NeedVisa(String name, String country, int days) {
super(name, country, days);
}
@Override
public void Visa() {
System.out.println(name+"已办理去往"+country+"的签证,签证期为"+days+"天");
}
}
NoVisa.java
package TemplatePattern1;
public class NoVisa extends TravelAbroad{
public NoVisa(String name, String country, int days) {
super(name, country, days);
}
@Override
public void Visa() {
System.out.println(country+"免签,签证期为"+days+"天");
}
}