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.println(i);
		}*/

		/*
		//视频  /设计模式/src/avi/a.avi
		BufferedInputStream input= new BufferedInputStream(new FileInputStream("/设计模式/src/avi/a.avi"));
		BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("b.avi"));
		byte[] b = new byte[1024];
		int len=0;
		while((len=input.read(b))!=-1){
			output.write(b,0,len);
		}
		output.close();
		input.close();

		//再給我测试一个代码:集合操作的多线程操作,常用API,那么你也还要写代码吗,麻烦!!!!!!!!!!!!!!!!
		*/

		code();//子类去写

		long end = System.currentTimeMillis();//结束时间
		return end-start;
	}
	//写一个抽象的方法,子类自己去实现方法的具体操作(内容)

	public abstract void code();//留给子类实现

}

For循环求运行时间类:

package 行为型_模板方法模式;

public class ForGetTime extends GetTime{

	@Override
	public void code() {
		for(int i=0;i<10000;i++){
			System.out.println(i);
		}
	}

}

IO流读取视频,求其运行时间的类:

package 行为型_模板方法模式;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class IOGetTime extends GetTime{

	@Override
	public void code(){
		try {
			BufferedInputStream input = new BufferedInputStream(new FileInputStream("avi/a.avi"));
			BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream("b.avi"));
			byte[] b = new byte[1024];
			int len=0;
			while((len=input.read(b))!=-1){
				output.write(b,0,len);
			}
			output.close();
			input.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

测试类:

package 行为型_模板方法模式;

public class GetTimeMain {
	public static void main(String[] args) throws Exception {
//		GetTime gTime = new GetTime();
//		System.out.println(gTime.getTime()+"毫秒");

		//面向抽象编程
		GetTime gt = new ForGetTime();
		System.out.println(gt.getTime()+"毫秒");

		//重新赋值为读取的是IO流.avi
		gt = new IOGetTime();
		System.out.println(gt.getTime()+"毫秒");

	}

}
时间: 2024-12-05 10:54:20

Java设计模式之模板方法模式或者说模板设计模式(属于行为型)的相关文章

大话设计模式_模板方法模式(Java代码)

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 简单描述:多个类的行为是差不多的,只是某些局部不一样,则交由父类中抽象出这些子类中相同的部分,父类中定义出不同的部分的接口(方法),这些不同部分的方法则由子类去实现,通过多态,实现代码的重用 大话设计模式中的截图: 例子代码: AbstractClass类: 1 package com.longsheng.templatemethod; 2 3 public

菜鸟译文(二)——使用Java泛型构造模板方法模式

如果你发现你有很多重复的代码,你可能会考虑用模板方法消除容易出错的重复代码.这里有一个例子:下面的两个类,完成了几乎相同的功能: 实例化并初始化一个Reader来读取CSV文件: 读取每一行并解析: 把每一行的字符填充到Product或Customer对象: 将每一个对象添加到Set里: 返回Set. 正如你看到的,只有有注释的地方是不一样的.其他所有步骤都是相同的. ProductCsvReader.java public class ProductCsvReader {       Set<

设计模式(8)--模板方法模式

关键词 :hook 钩子    Applet 中 init() destory() 为钩子,需要子类去实现. 新原则: 别调用我们,我们会调用你们    高层调用低层   低层不能调用高层. 目的 :封装算法 模板方法:子类决定如何实现算法中的步骤 策略:封装可互换的行为,然后使用委托来决定要采用哪一个行为 工厂方法:由子类决定实例化哪个具体类 OO原则:新原则上面 OO模式:模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类.模板方法使得子类可以在不改变算法的结构的情况下,重

【设计模式】——模板方法模式

模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤.当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理. AbstractClas是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法.这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现.顶级逻辑也有可能调用一些具体

【大话设计模式】—— 模板方法模式

一.概念 上一篇文章刚刚讲了[大话设计模式]-- 原型模式,原型模式主要是通过Clone()方法,创建新的对象,免去了初始化的过程.模板方法模式也特别会"偷工减料",把不变的行为搬移到超类,去除子类中的重复代码,将代码的复用优势展现的淋漓尽致.它为我们提供了特定的结构和样式,我们只需关心填充数据内容就好,省心啊- 下面让我们来看一下它的准确定义: 模板方法(TemplateMethod)模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构

设计模式之模板方法模式(Template Method)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

【设计模式】模板方法模式

模板方法模式 一个父类[运动会]类 两个子类,一个[CClass1]类,一个[CClass2]类,班级类是运动会类的子类,父类制定了运动会的流程(算法的逻辑架构),子类分别去实现流程中的具体实现. 子类不需要重写流程,只需要重写流程中每一项的具体内容. 以此为例,流程就是先干什么.后干什么.再干什么,而每一项就是分别干的内容. /************************************************************************ 设计模式 模板方法模式

“Head First 设计模式“ :模板方法模式

模板方法模式 定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.模板方法就是一个固定步骤的"算法"骨架方法.这个算法的可变部分通过继承,在子类中重载实现.这样就可以在算法骨架不变的情况下,算法细节步骤根据不同的需求进行适应的改变,类图如下: 优点:● 模板方法模式在定义了一组算法,将具体的实现交由子类负责.● 模板方法模式是一种代码复用的基本技术.● 模板方法模式导致一种反向的控制结构,通

C#设计模式之四建造者模式(Builder Pattern)【创建型】

原文:C#设计模式之四建造者模式(Builder Pattern)[创建型] 一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬盘.显卡.机箱等组装而成的.手机当然也是复杂物品,由主板,各种芯片,RAM 和ROM  摄像头之类的东西组成.但是无论是电脑还是手机,他们的组装过程是固定的,就拿手机来说,组装流水线