设计模式之模板方法模式
来源:互联网 发布:企业网站源码带手机版 编辑:程序博客网 时间:2024/06/05 05:24
- 小思绪:设计模式讲究的就是一个平衡,应用架构讲究的也是平衡。
有如下两个类
//BMWCarpublic class BMWCar { public void start(){ System.out.println("宝马车启动!"); } public void stop(){ System.out.println("宝马车停止"); } public void alarm(){ System.out.println("宝马车响喇叭"); } public void run(){ this.start(); this.alarm(); this.stop(); }}//BenzCarpublic class BenzCar { public void start(){ System.out.println("奔驰车启动!"); } public void stop(){ System.out.println("奔驰车停止"); } public void alarm(){ System.out.println("奔驰车响喇叭"); } public void run(){ this.start(); this.alarm(); this.stop(); }}
我们发现上面两个类中run()方法存在重复,我们可以把重复代码抽取出来,于是引入模板方法模式:
模板方法
首先我们在实现需求的时候,发现子类有重复的代码,而且这个代码都是一个标准流程。这个时候我们引入模板方法设计模式,然后重复的部分抽象到父类中。
模板方法的优点:
1. 模板方法是为了封装不变,扩展可变部分
2. 提取公共部分,便于代码的维护
3. 行为由父类控制,子类实现
定义一个抽象的父类Car
,BenzCar和BMWCar都去继承Car
public abstract class Car { protected abstract void start(); protected abstract void stop(); protected abstract void alarm(); public final void run(){ this.alarm(); this.start(); this.stop(); }}
- 上述代码中,用final修饰run()方法,阻止子类覆盖run()方法,保证行为由父类Car控制。
public class BMWCar extends Car{ protected void start(){ System.out.println("宝马车启动!"); } protected void stop(){ System.out.println("宝马车停止"); } protected void alarm(){ System.out.println("宝马车响喇叭"); }}
public class BenzCar extends Car{ protected void start(){ System.out.println("奔驰车启动!"); } protected void stop(){ System.out.println("奔驰车停止"); } protected void alarm(){ System.out.println("奔驰车响喇叭"); }}
- 用
protected
修饰start()、stop()、alarm()三个方法,阻止在不同包中的客户端Client自己去调用它们。Car bmwCar = new BMWCar(); bmwCar.start();//这种调用方式就被阻止了
Client:
public class Client { public static void main(String[] args) { Car bmwCar = new BMWCar(); bmwCar.run(); Car benzCar = new BenzCar(); benzCar.run(); }}
0 0
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- 企业小号来啦!统一钉铛2.1新功能升级啦
- python数据分析与挖掘学习笔记(3)_小说文本数据挖掘part2
- Python练手项目0009
- 如何自动创建结点
- 关于android studio生成jar库的方法(aidl)
- 设计模式之模板方法模式
- 基于Java开发的免费网络拓扑软件-SugarNMSTool
- MySQL索引介绍
- Linux基础之文件系统简介及其系统管理工具
- android 触摸屏校准
- Hibernate中对类进行查询,而不是对表查询
- 哈希表(散列表 Hash Table)
- 递归处理全排列问题的两种方法
- android2.2-froyo移植(freescale i.mx23平台)