模板方法设计模式简单实现
2017-08-16 11:56
309 查看
1、模板方法介绍
模板方法模式是在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
2、代码实现
模板方法模式是在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法可以进行挂钩(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店上牌,自己上牌
相关文章推荐
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验" 参考答案
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(4)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- 从Spring HibernateTemplate模板方法设计模式的实现谈起
- 设计模式C++实现(5)——原型模式、模板方法模式
- js如何实现设计模式中的模板方法
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式4.1--回调技术实现模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- 设计模式实现(七)--- 模板方法模式(Template Method)
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- 设计模式C++实现——模板方法模式