模板模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。
模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
经典代码:
abstract class SortTemplate {public void showSortResult(int[] arr) {sort(arr);for(int x:arr) {System.out.print( x + " / ");}System.out.println();}public abstract void sort(int[] arr);
}class BubbleSort extends SortTemplate {public void sort(int[] arr) {System.out.println("冒泡排序:");for(int i=0;i<arr.length-1;i++){for(int j=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}
}class SelectSort extends SortTemplate{public void sort(int[] arr){System.out.println("选择排序:");for(int i=0;i<arr.length-1;i++){for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}}
}class QuickSort extends SortTemplate{public void sort(int[] arr){System.out.println("快速排序:");quickSort(arr,0,arr.length-1);}public void quickSort(int[] arr,int left,int right){if(left<right){int i=left,j=right,x=arr[left];while(i<j){while(i<j&&arr[j]>=x)j--;if(i<j){arr[i++]=arr[j];}while(i<j&&arr[i]<x)i++;if(i<j){arr[j--]=arr[i];}}arr[i]=x;quickSort(arr,left,i-1);quickSort(arr,i+1,right);}}
}class TemplateDemo{public static void main(String[] args) {int[] arr1 = {44,44,2,32,54,22,88,77,99,11};int[] arr2 = {34,32,6,12,98,34,81,30,1,45};int[] arr3 = {73,5,19,40,99,20,12,48,28,64,308,23};SortTemplate st = new BubbleSort();st.showSortResult(arr1);st = new SelectSort();st.showSortResult(arr2);st = new QuickSort();st.showSortResult(arr3);}
}

运行结果:

冒泡排序:
2 / 11 / 22 / 32 / 44 / 44 / 54 / 77 / 88 / 99 /
选择排序:
1 / 6 / 12 / 30 / 32 / 34 / 34 / 45 / 81 / 98 /
快速排序:
5 / 12 / 19 / 20 / 23 / 28 / 40 / 48 / 64 / 73 / 99 / 308 /

java设计模式之模板模式相关推荐

  1. 二、java设计模式之模板模式深进浅出

    一.背景 模板模式具体怎么使用,下面我会详细讲,如果有那个地方讲的不到位了,请大家多多指教,共同学习,我尽量以白话的形式进行展示,废话不多说了,下面开始. 二.spring中的使用 springJDB ...

  2. Java设计模式之模板模式【通过LOL选英雄案例】

    初衷 设计模式(Design Pattern)引用百度百科中的一句话,就是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.实际上在我们的实际编码中到处都有设计模式的影子,比如最常用的单例 ...

  3. 23种java设计模式之模板模式

    说实话,我们学的框架其实就是模板,是不是这样引出话题就能很快理解模板模式呢,好了,下面我们用一个经典的泡咖啡,泡茶案例来说明模板模式. 泡咖啡步骤:水烧开--->冲泡咖啡粉--->把咖啡倒 ...

  4. java设计模式-16模板模式

    定义 在一个抽象类公开定义了执行它的方法的模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变 ...

  5. Java设计模式之策略模式+工厂模式+模板模式

    Java设计模式之策略模式+工厂模式+模板模式 1.策略模式+工厂模式+模板模式 个人的理解:实际开发工程中,一些业务很复杂的逻辑使用很多的 if 或者 if···else 语句,不利于维护和扩展,为 ...

  6. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

    Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

  7. Java设计模式之模板方法模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  8. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  9. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

最新文章

  1. Mybatis自定义排序
  2. top99 slam
  3. consul的安装搭建
  4. 添加notepad到右键菜单栏
  5. 元组中[-1]的作用
  6. linux read函数_浅谈Linux内核IO体系之磁盘IO
  7. centos终止linux程序,CentOS启动和停止服务详解
  8. Python3 多线程(连接池)操作MySQL插入数据
  9. linux系统使用国内清华镜像下载安装Anaconda3
  10. odi 12.2.1.1新特性
  11. CodeForces 650A Watchmen
  12. MySQL的InnoDB存储引擎
  13. 3dmm人脸配准/重建:gold standard algorithm
  14. linux firefox 解雇ie,Fire IE
  15. nodejs实现单点登录系统
  16. 机器翻译模型简介(一)
  17. C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
  18. 算法的时间复杂度排序
  19. 路由追踪traceroute分析
  20. 数学与计算机学院校友会,福州大学数学与计算机科学学院厦门校友会成立

热门文章

  1. 将chart放入panel中出现滚动条_聊天场景在web前端开发中的体验与优化
  2. nginx 根证书 服务器证书,Nginx双向证书校验(服务器验证客户端证书)
  3. table每行自动触发ajax,table.ajax.reload()成功后未触发:function()
  4. esmini接入外部ego车控制
  5. You must install 'msgfmt' on your build machine
  6. jni c call java_Java通过-jni调用c语言
  7. tdk怎么设置_你真的做好网站的标题、描述、关键词(TDK)设置了吗?
  8. mysql not is null_转!!mysql 字段 is not null 和 字段 !=null
  9. python处理ncdc气象数据并利用arcgis可视化
  10. 第六节:反射(几种写法、好处和弊端、利用反射实现IOC)