二、 抽象类延伸出的模板设计模式

具体可参考:https://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html

模板设计模式的关键:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑

示例:

public abstract class AbstractTemplate {

    /**
     * 模板方法
     */
    public void templateMethod() {
        // 调用基本方法
        abstractMethod();
        hookMethod();
        concreteMethod();
    }

    /**
     * 抽象方法(由子类实现)
     */
    protected abstract void abstractMethod();

    /**
     * 基本方法(由子类重写)
     */
    protected void hookMethod() {

    }

    /**
     * 具体方法(抽象类实现)
     */
    private final void concreteMethod() {
        // 业务相关的代码
    }

}

原文地址:https://www.cnblogs.com/liyue-sqsf/p/8878573.html

时间: 2024-11-15 06:44:11

二、 抽象类延伸出的模板设计模式的相关文章

C#模板设计模式

一,我们为什么需要模板设计模式? 在程序设计中,可能每个对象都有共同的地方,而此时如果每个对象定义一次,如下例子,每个对象都写Stay()方法,这样在每个类中都有很多相同的代码,此时,我们需要用到模板设计模式,来解决这个问题 二,模板设计模式思路:是把相同的部分抽象出来到抽象类中去定义,具体子类来继承抽象类,并实现抽象类中的抽象方法,从而达到具体实现的不同部分,这个思路也正式模板方法的实现精髓所在 三,如下例子: using System; using System.Collections.Ge

C#模板设计模式使用和学习心得

模板设计模式: 模版方法模式由一个抽象类和一个(或一组)实现类通过继承结构组成,抽象类中的方法分为三种: 抽象方法:父类中只声明但不加以实现,而是定义好规范,然后由它的子类去实现. 模版方法:由抽象类声明并加以实现.一般来说,模版方法调用抽象方法来完成主要的逻辑功能,并且,模版方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写. 钩子方法:由抽象类声明并加以实现.但是子类可以去扩展,子类可以通过扩展钩子方法来影响模版方法的逻辑. 抽象类的任务是搭建逻辑的框架,通常由经验丰富的人

java数据库访问—JdbcTemplate方式(模板设计模式)

前面总结中分别使用了单纯的jdbc以及jdbc配合数据库连接池的方式进行了简单的数据库查询操作,从代码编写的复杂度以及性能两个方面来看使用数据库连接池都好于用单纯的jdbc.另外,在上述两种方式中我们也看到了很多的重复代码,比如获取connection.获取statement,关闭connection.关闭statement等,这些代码在我们每一次的数据库操作中都是重复的,是否有更好的屏蔽这种重复操作的方式呢?这篇文章给出答案. 通用的操作流程如下: 在流程中只有执行sql在每次数据库操作中是不

模板设计模式

模板设计模式概述 模板方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现 优点 使用模板方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求 缺点 如果算法骨架有修改的话,则需要修改抽象类 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStr

实际开发中的模板设计模式

最近的项目中,在使用spring+springJBDC 开发时,从一开始的一脸懵逼到越来越顺手,着一切,都归功于一大堆的封装方法.在这里,记录两个非常有用方法以便查阅学习 一. 组合查询的基础类(BaseCondition) 该类中,抽取了常用的组合查询的公共属性和方法,例如:分页查询中使用的 pagaSize// 页大小.pageNumber// 当前页码.rowCount;// 记录总数 rowCount;// 记录总数 拼接sql语句使用的多个重载add()方法,更据不同数据类型重载; 最

QT开发(二十五)——QT模板库

QT开发(二十五)--QT模板库 一.QTL模板库简介 QT模板库(QT Template Library 简称QTL)是一套提供对象容器的模板. QTL提供了对象的链表.对象的矢量(动态数组).从一个类型到另一个类型的映射(或称为字典)和相关的迭代器和算法.容器是包含和管理其它对象的一个对象,并且提供迭代器对被包含的对象进行访问. 1.QT容器类简介 容器是能够在内存中存储其他特定类型的对象的对象,一般是通用的模板类.QT提供了自己的一套容器类,即在QT的应用程序中,可以使用标准C++的STL

Java设计模式之模板方法模式或者说模板设计模式(属于行为型)

抽象类,不变的代码写了,要变化的部分留给子类去实现: package 行为型_模板方法模式; //模板设计模式的意思是把不变定位部分写出来,变化的部分留给子类去实现 public abstract class GetTime { public long getTime() throws Exception{ long start = System.currentTimeMillis();//开始时间 /* //for循环 for(int i=0;i<10000;i++){ System.out.

Yii框架学习笔记(二)将html前端模板整合到框架中

选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/topics/390807796 更多内容 百度:yii 前端 http://my.oschina.net/u/1472492/blog/221085 摘要 Yii框架学习笔记(二)将html前端模板整合到框架中 原文地址:http://www.ldsun.com/1309.html 上一节成功将Y

黑马程序员-模板设计模式-获取程序的运行时间!

package com.qumibao.www; //获取一段程序的运行时间. /* 思路: 1.定义一个获取时间的抽象类 2.定义一个子类集成该抽象类. 2.定义一个方法.只需获取该程序的开始时间与结束时间并相减即可,由于时间长度不确定,用long类型来定义变量. 3.获取当前时间API中提供了System中的相关方法. System.currentTimeMills(); */ abstract class GetTime{ public void getTime(){ long start