模板方法模式 -- 旅游签证
>> 想要出国旅游,基本都要经过以下几个步骤:办护照、办签证、买票、到达。
>> 但是目前有些国家对于中国人是
免签
的或者是
落地签
,所以去不同的国家旅行时的具体步骤会
有所不同
。
>> 请用模板方法模式实现上述内容。(提示:
免签时可以采用钩子方法
)。
方法一 :TravelAbroad
public abstract class TravelAbroad {
String person;// 客户名字
String name;// 国家
int Days;// 签证时间
public TravelAbroad(String person, String name, int days) {
this.person = person;
this.name = name;
Days = days;
}
public void Process() {
passport();
if (hook()) {
Visa();
}
ticket();
arrive();
}
public boolean hook() {// 钩子方法
return true;
}
public void passport() {// 办护照
System.out.println(person + "已办理" + name + "护照");
}
public void Visa() {
};// 办签证
public void ticket() {
// 买票
System.out.println(person + "已买好到达" + name + "的机票");
}
public void arrive() {
// 到达
System.out.println(person + "已到达" + name);
}
}
方法二:LandVisa
public class Landvisa extends TravelAbroad {// 落地签
public Landvisa(String person, String name, int days) {
super(person, name, days);
// TODO Auto-generated constructor stub
}
@Override
public void Visa() {
// TODO Auto-generated method stub
System.out.println(person + "已办理去往" + name + "的签证,签证期为" + Days + "天");
}
}
方法三:NeedVisa
public class NeedVisa extends TravelAbroad {// 需要签证的
public NeedVisa(String person, String name, int days) {
super(person, name, days);
// TODO Auto-generated constructor stub
}
@Override
public void Visa() {
// TODO Auto-generated method stub
System.out.println(person + "已办理去往" + name + "的签证,签证期为" + Days + "天");
}
}
程序实现:Application
public class Application {
public static void main(String[] args) {
TravelAbroad ta = new NeedVisa("小王", "美国", 30);
ta.Process();
TravelAbroad novisa = new NoVisa("小李", "摩洛哥", 30);
novisa.Process();
TravelAbroad landvisa = new Landvisa("小王", "尼泊尔", 30);
landvisa.Process();
}
}
运行结果:
实现软件 - eclipse: