您的位置:首页 > 其它

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

2017-08-16 11:56 309 查看
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店上牌,自己上牌
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式