设计模式之模板方法模式

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

模板方法模式

在模板模式(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. 全网仅此一篇:工业级压力传感器设计及实现(华大半导体HC32L136)
  2. 删除数据 DataIntegrityViolationException: not-null property references a null or transient value解决...
  3. 第三周课程总结及实验报告(一)
  4. JavaWeb:HttpServletResponse和HttpServletRequest
  5. 【算法】划分数 动态规划
  6. 大剑无锋之二分搜索、二分搜索时间复杂度、三分查找呢?
  7. ios如何判断键盘是否已经显示
  8. 光荣的梦想(信息学奥赛一本通-T1328)
  9. Java-如何挖取某个网站中的ajax请求信息
  10. c语言谭浩强第六章答案,C语言谭浩强版本第6章课后练习题答案..doc
  11. python html5lib时间_如何使用Python模块 html5lib
  12. Number and String in JS
  13. mongodb基础操作
  14. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_17_注解_解析注解...
  15. 程序员常用不常见很难得的地址大全
  16. HTTP错误状态码详解
  17. 案例:Java多态实现饮料购买咖啡、可乐、矿泉水
  18. XFire野猪书-XFire开发指南第二版
  19. 对称算法与非对称算法
  20. 地产AR模拟看房软件开发

热门文章

  1. gogs安装完了, idea的git也配置完了, 代码也上传到gogs了, 接下来安装jenkins持续集成工具
  2. java升序降序排列desc,TreeMap升序|降序排列和按照value进行排序
  3. 信息安全服务资质CCRC认证和ISO27001认证有哪些不同?
  4. 学习记录--编码器测速
  5. DID-M3D | 用于单目3D目标检测的解耦实例深度(ECCV2022)
  6. jQuery的click点击方法合集
  7. 跨平台应用开发进阶(六十一):uni-app 跨平台技术开发框架可行性调研
  8. 转-让你的控件也具有拖拽(drag-and-drop)功能
  9. 计算机毕业设计基于Python实现的作业查重系统
  10. 诺基亚8110能玩java吗_诺基亚81104G版评测 买不了吃亏也买不了上当