模版方法模式--旅游签证

模版方法模式旅游签证

题目

想要出国旅游,基本都要经过以下几个步骤:办护照、办签证、买票、到达。

但是目前有些国家对于中国人是免签的或者是落地签,所以去不同的国家旅行时的具体步骤会有所不同

请用模板方法模式实现上述内容。(提示:免签时可以采用钩子方法)。

代码

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+"天");
    }
}

运行截图

UML类图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值