模板方法模式
来源:互联网 发布:js设计模式视频 编辑:程序博客网 时间:2024/06/08 06:23
模板方法模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
一 、 概述
模板方法是关于怎样将若干个方法集成到一个方法中,以便形成一个解决问题的算法骨架。模板方法模式的关键是在一个抽象类中定义一个算法的骨架,即将若干个方法集成到一个方法中,并称该方法为一个模板方法,或简称为模板。二、模板方法模式的结构与使用
模式的结构中包括两种角色:
模式的UML类图
1.抽象模板(Abstract Template):AbstractTemplate.java
import java.io.*;
publicabstract class AbstractTemplate{
File [] allFiles;
File dir;
AbstractTemplate(File dir){
this.dir=dir;
}
public final void showFileName(){
allFiles=dir.listFiles();
sort();
printFiles();
}
public abstract void sort();
public abstract void printFiles();
2.具体模板(Concrete Template)_1:ConcreteTemplate1.java
import java.io.*;
import java.awt.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class ConcreteTemplate1 extends AbstractTemplate{
ConcreteTemplate1(File dir){
super(dir);
}
public void sort(){
for(inti=0;i<allFiles.length;i++)
for(int j=i+1;j<allFiles.length;j++)
if(allFiles[j].lastModified()<allFiles[i].lastModified()){
File file=allFiles[j];
allFiles[j]=allFiles[i];
allFiles[i]=file;
}
}
public void printFiles(){
for(inti=0;i<allFiles.length;i++){
long time=allFiles[i].lastModified();
Date date=new Date(time);
SimpleDateFormat matter= newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
String str=matter.format(date);
String name=allFiles[i].getName();
int k=i+1;
System.out.println(k+""+name+"("+str+")");
}
}
}
2.具体模板(Concrete Template)_2:ConcreteTemplate2.java
import java.io.*;
import java.awt.*;
public class ConcreteTemplate2 extends AbstractTemplate{
ConcreteTemplate2(File dir){
super(dir);
}
public void sort(){
for(inti=0;i<allFiles.length;i++)
for(int j=i+1;j<allFiles.length;j++)
if(allFiles[j].length()<allFiles[i].length()){
File file=allFiles[j];
allFiles[j]=allFiles[i];
allFiles[i]=file;
}
}
public void printFiles(){
for(inti=0;i<allFiles.length;i++){
long fileSize=allFiles[i].length() ;
String name=allFiles[i].getName();
int k=i+1;
System.out.println(k+""+name+"("+fileSize+"字节)");
}
}
}
3.应用 Application.java
import java.io.File;
public class Application{
public static void main(String args[]) {
File dir=new File("d:/javaExample");
AbstractTemplate template=new ConcreteTemplate1(dir);
System.out.println(dir.getPath()+"目录下的文件:");
template.showFileName();
template=new ConcreteTemplate2(dir);
System.out.println(dir.getPath()+"目录下的文件:");
template.showFileName();
}
}
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- android 签名对比
- Maximum Depth of Binary Tree
- 获取当前时间和星期
- Authentication vs. Authorization 验证与授权
- PHP基础18-直接输出html
- 模板方法模式
- web.xml 出现content is not allowed in prolog的提示
- Concurrent中DelayedQueue原理与用法
- DD_belatedPNG: 解决IE6下半透明png的给劲儿方法
- OUTLOOK 2010邮箱满了解决办法
- traincascade.exe 出错:死循环在某个阶段
- JAVA中的特殊符号含义
- Webservice soap wsdl区别之个人见解
- 动态规划(6)最长公共子串