设计模式之模板方法模式

  • 模板方法模式
    • 代码实现
    • 模式的应用

模板方法模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

代码实现

package com.cyc.design.template;
public class Main {public static void main(String[] args) {F f = new C1();
//        f.op1();f.m();}
}abstract class F {//在m方法中明确的调用了op1,op2, 这两个方法就是交给子类去实现的public void m() {op1();op2();}abstract void op1();abstract void op2();
}/*** c1继承抽象类F, 从而去实现定义好的op1和op2方法*/
class C1 extends F{@Overridevoid op1() {System.out.println("op1");}@Overridevoid op2() {System.out.println("op2");}
}

模式的应用

jvm的classLoader

先看代码

public class TemplateTest {public static void main(String[] args) throws ClassNotFoundException {//加载指定目录下的class类, 并输出他的完整类名Class clazz = TemplateTest.class.getClassLoader().loadClass("com.cyc.design.strategy.Cat");System.out.println(clazz.getName());}
}

查看源码

因此 , 自定义ClassLoader类加载器, 只需继承抽象类ClassLoader, 重写findClass方法即可, 这里用到的就是模板方法模式

示例代码如下

public class T006_ClassLoader extends ClassLoader {@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {File f = new File("c:/test/", name.replace(".", "/").concat(".class"));try {FileInputStream fis = new FileInputStream(f);ByteArrayOutputStream baos = new ByteArrayOutputStream();int b = 0;while ((b=fis.read()) !=0) {baos.write(b);}byte[] bytes = baos.toByteArray();baos.close();fis.close();//可以写的更加严谨return defineClass(name, bytes, 0, bytes.length);} catch (Exception e) {e.printStackTrace();}return super.findClass(name); //throws ClassNotFoundException}
}

设计模式之模板方法模式(TemplateMethod)相关推荐

  1. php templete什么意思,PHP设计模式之模板方法模式定义与用法详解

    本文实例讲述了PHP设计模式之模板方法模式定义与用法.分享给大家供大家参考,具体如下: 什么是模板方法模式 模板方法(Template Method)设计模式中使用了一个类方法templateMeth ...

  2. 一篇博客读懂设计模式之---模板方法模式

    设计模式之模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 简而言之就是:父类定义了骨架(调用哪些方法及其 ...

  3. 设计模式之模板方法模式详解

    设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...

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

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

  5. 【设计模式】模板方法模式(C#)

    [设计模式]模板方法模式 1.概述 背景 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某 ...

  6. 【Java】设计模式之模板方法模式

    - 好记性不如烂笔头,特将设计模式之模板方法模式记录在我的小仓库. 文章目录 什么是模板方法模式 案例 什么是模板方法模式 简而言之就是一套算法可以适用于多个类,则进行的步骤汇总,让子类别在不改变算法 ...

  7. Carson带你学设计模式:模板方法模式(Template Method)

    前言 今天Carson来全面总结最常用的设计模式 - 模板方法模式. Carson带你学设计模式系列文章 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南 Carson带你 ...

  8. C++设计模式之模板方法模式

    模板方法模式 设计模式的定义 模板方法模式详解 背景----柠檬茶和咖啡的的冲泡方式 代码实现咖啡和茶冲泡的类 整理相似点 进一步设计 总结一下 认识模板方法 测试一下 模板方法模式的优点 模板方法的 ...

  9. 设计模式-04.模板方法模式

    设计模式-04.模板方法模式 模板方法模式 定义 介绍 实现 优点 缺点 使用场景 扩展 定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类 ...

最新文章

  1. xib 设置阴影_使用“IBInspectable”XIB设置圆角、边框、阴影
  2. 28335的CPU定时器解析
  3. c语言 常量字符串数组,C语言常量以及字符串数组
  4. Day45--js基本小结
  5. bitcount java_Java源码解释之Integer.bitCount
  6. HTML+CSS+JS实现 ❤️H5图片列表滑动特效❤️
  7. android打开网络连接失败怎么办,《我叫MT Online》安卓版网络连接失败怎么解决?...
  8. telnet 回显 linux,telnet实现本地回显
  9. charles请求转发_使用Charles代理进行请求转发
  10. 6. LaTeX 参考文献的排版与引用
  11. WPF自定义分页控件
  12. 微信小程序基础学习(2)- 模板与配置:WXML 模板语法、WXSS 模板样式、全局配置、页面配置、网络数据请求
  13. memcpy 函数详解
  14. Docker - volume、-v 区别
  15. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)
  16. java 下载junit的jar包_junit4下载-Junit4.11完整包【附使用方法】-东坡下载
  17. mybatis-plus 读写空间数据 geometry类型
  18. 损失函数结果不理想解决方案——机器学习
  19. 多个接口可以封装成一个接口处理
  20. 哈工大计算机系统实验六——高速缓冲器模拟

热门文章

  1. python--查看函数帮助文档及快捷键使用
  2. 仿人机器人的跑步研究学习笔记1之机器人的基础知识
  3. “BIM+智慧工地”精准“数字化”变身智慧工程“管家”
  4. 低通滤波器的截止频率设置概述
  5. 服务器的文件防误删的软件,服务器共享文件防复制软件、共享文件防删除软件的选择方法...
  6. 三菱PLC ALTP指令
  7. 美团前端一面高频面试题
  8. 计算机英语写一封邮件给汤姆作文,英语仿写一封信 介绍自己
  9. HBuilderX 运行到微信小程序报错:app.json: app.json 未找到
  10. 计算机辅助药物设计总结