模板方法设计模式简单实现

1、模板方法介绍
模板方法模式是在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

模板方法可以进行挂钩(hook),钩子(hook)是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。

2、代码实现

/**
 * 4S店提供售卖模板
 * @author Administrator
 *
 */
public abstract class SaleCarTemplate
{
    public void processBuy(){
        carLoan();
        carInsurance();
        carDecoration();
        if(carLicenseBy4S()){
            System.out.println("通过4S店办理上牌");
        } else {
            carLicense();
        }
    }

    public void carLoan(){
        System.out.println("在4S店办理汽车贷款,一般强制");
    }

    public void carInsurance(){
        System.out.println("在4S店办理汽车保险,一般强制");
    }

    /**
     * 默认通过4S店办理上牌,如果想自己上牌,就主动提出
     */
    public abstract void carLicense();

    /**
     * 为吸引消费者,4S店会赠送一些汽车装饰,消费者自己选择需要什么装饰
     */
    public abstract void carDecoration();

    public  boolean carLicenseBy4S(){
        // 钩子
        return true;
    }
}
/**
 * 消费者在模板基础上自定义购买套餐
 * @author Administrator
 *
 */
public class CustomerBuy extends SaleCarTemplate
{

    public void carLicense(){
        System.out.println("不通过4S店上牌,自己上牌");
    }

    public  boolean carLicenseBy4S(){
        String userInput = "";
        boolean isAgreed = false;
        BufferedReader bufferReader = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            System.out.println("你想通过4S店办理上牌吗,回答y/n");
            userInput = bufferReader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        } finally {
            try
            {
                bufferReader.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }

        if(userInput.equals("y")){
            isAgreed = true;
        } else {
            isAgreed = false;
        }

        return isAgreed;
    }

    @Override
    public void carDecoration()
    {
        System.out.println("赠送行车记录仪");
        System.out.println("赠送贴膜");
    }

}
public static void main(String[] args)
    {
        System.out.println("开始汽车购买流程--------");
        CustomerBuy customerBuy = new CustomerBuy();
        customerBuy.processBuy();
    }

结果输出

开始汽车购买流程--------
在4S店办理汽车贷款,一般强制
在4S店办理汽车保险,一般强制
赠送行车记录仪
赠送贴膜
你想通过4S店办理上牌吗,回答y/n
n
不通过4S店上牌,自己上牌
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值