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

来源:互联网 发布:网络有什么好项目投资 编辑:程序博客网 时间:2024/05/16 16:18

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/nn不通过4S店上牌,自己上牌
原创粉丝点击