模板方法模式--介绍、应用及代码
2014-02-27 10:53
507 查看
一谈到模板方法,“菜鸟”们有自信了,因为它的存在,可以说大多数程序员都真正并应用过了设计模式,因为。。。
--------对模板方法感触最深的应该是公司技术大牛和刚入职的新员工。技术大牛搭建好主框架,具体实现交给新员工。
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构既可重定义该算法中的某些特定步骤。
实例:
情景1:用本人开发双色球预测软件做实例。当某一期的双色球结果出来以后,我很希望能够验证它是否符合我定义的规则,并找到该组号码的规律。
应用1:方法
假设1:在没有时间的情况下,我会定义好需要检验哪些规则,至于具体这些规则如何实现,我可以等到有时间的时候来完成。
代码:
输入:当期号码Set 输出:是否符合规则boolean
情景2:入职时,你的team leader想检验你的代码水平,然后又想你的工作队项目有益,他把主要逻辑一写,剩下的交给你去实现。
应用2:类
假设2:如果是在公司,如果,我是说如果我是一个大牛,我需要写一个类,它的作用是数据结构之间的转换。功能需要,实现其实简单。这个时候,我会把框架打好,然后让我的“徒弟”去实现这些方法。
代码:
我需要这样
DataFormatConvertAbstract dfca=new DataFormatConvert();
It's all!!!
--------对模板方法感触最深的应该是公司技术大牛和刚入职的新员工。技术大牛搭建好主框架,具体实现交给新员工。
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构既可重定义该算法中的某些特定步骤。
实例:
情景1:用本人开发双色球预测软件做实例。当某一期的双色球结果出来以后,我很希望能够验证它是否符合我定义的规则,并找到该组号码的规律。
应用1:方法
假设1:在没有时间的情况下,我会定义好需要检验哪些规则,至于具体这些规则如何实现,我可以等到有时间的时候来完成。
代码:
输入:当期号码Set 输出:是否符合规则boolean
public boolean isRedValid(Set redSet) { if(!isRedValidByLX2(redSet)){ return false; } if(!isRedValidByCmp(redSet)){ return false; } if(!isRedValidByFC(redSet)){ return false; } if(!isRedValidByApriori(redSet)){ return false; } return true; }
public boolean isRedValidByLX2(Set redSet) { boolean flag = true; List<String> list = Test.getInvalidFC2LX(); String tmp = ""; for (String s : list) { if (redSet.contains(Integer.parseInt(s.split(",")[0])) && redSet.contains(Integer.parseInt(s .split(",")[1]))) { tmp = s; flag = false; break; } } if (!flag) { System.out.println("注意:生成的数字包含不可能生成的连续2连号" + tmp + "需要重新生成!"); try { String s=""; Iterator it = redSet.iterator(); for (int i = 0; i < 6; i++) { if (it.hasNext()) { s+=(it.next().toString()); } } FileOperation.FileWriteFCYes("注意:生成的数字包含不可能生成的连续2连号" + tmp + "需要重新生成!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return flag; }其他代码略
情景2:入职时,你的team leader想检验你的代码水平,然后又想你的工作队项目有益,他把主要逻辑一写,剩下的交给你去实现。
应用2:类
假设2:如果是在公司,如果,我是说如果我是一个大牛,我需要写一个类,它的作用是数据结构之间的转换。功能需要,实现其实简单。这个时候,我会把框架打好,然后让我的“徒弟”去实现这些方法。
代码:
我需要这样
import java.util.List; public abstract class DataFormatConvertAbstract { // 将“116”变成1,1,6;将"09,17,"变成9,17(整数) public abstract int[] strToIntArr(String s); // 将“116”变成1,1,6;将"09,17,"变成09,17(字符串) public abstract String[] strToStrArr(String s); // 列表转换成字符串 public abstract String[] listToStrArr(List<String> list); }我徒弟需要这样
public class DataFormatConvert implements DataFormatConvertAbstract { // 将“116”变成1,1,6;将"09,17,"变成9,17(整数) public static int[] strToIntArr(String s) { int[] result; if (s.indexOf(",") == -1) { char[] tmp; tmp = s.toCharArray(); result = new int[tmp.length]; for (int i = 0; i < tmp.length; i++) { result[i] = Integer.parseInt(String.valueOf(tmp[i])); } } else { String[] tmp = s.split(","); result = new int[tmp.length]; for (int i = 0; i < tmp.length; i++) { result[i] = Integer.parseInt(String.valueOf(tmp[i])); } } return result; } // 将“116”变成1,1,6;将"09,17,"变成09,17(字符串) public static String[] strToStrArr(String s) { String[] resultStr = null; if (s.indexOf(",") == -1) { char[] tmp; tmp = s.toCharArray(); resultStr = new String[tmp.length]; for (int i = 0; i < tmp.length; i++) { resultStr[i] = String.valueOf(tmp[i]); } } else { String[] tmp = s.split(","); resultStr = new String[tmp.length]; for (int i = 0; i < tmp.length; i++) { resultStr[i] = tmp[i]; } } return resultStr; } // 将“116”变成1,1,6;将"09,17,"变成09,17(字符串) public static List<String> strToList(String s) { List<String> result = null; if (s.indexOf(",") == -1) { char[] tmp; tmp = s.toCharArray(); result = new ArrayList<String>(); for (int i = 0; i < tmp.length; i++) { result.add(String.valueOf(tmp[i])); } } else { String[] tmp = s.split(","); result = new ArrayList<String>(); for (int i = 0; i < tmp.length; i++) { result.add(tmp[i]); } } return result; } }最后,我测试
DataFormatConvertAbstract dfca=new DataFormatConvert();
int[] m = strToIntArr("119,09"); for (int i = 0; i < m.length; i++) { System.out.println(m[i]); } String[] m = strToStrArr("119,09,"); for (int i = 0; i < m.length; i++) { System.out.println(m[i]); }
It's all!!!
相关文章推荐
- 黑马程序员:ClassLoader介绍、自定义ClasLoader的应用及模板方法设计模式
- 设计模式----模板方法模式UML和实现代码
- 29. 代码实例-设计模式-模板方法
- Android源码学习之模板方法模式应用
- 模板方法模式分析、结构图和基本代码
- 《大话设计模式》ruby版代码:模板方法模式
- 抽象类应用——模板方法模式
- 设计模式----模板方法模式UML和实现代码
- JAVA模板方法设计模式(从现实生活角度理解代码原理)
- 单例模式--介绍、应用及代码
- 代理模式--介绍、应用及代码
- 设计模式在游戏中的应用--模板方法(七)
- 【机房重构】模板方法模式应用—组合查询
- Template Method 模板方法模式代码
- TemplateMethod模板方法模式之应用
- JDBC之使用策略模式和模板方法模式优化代码
- java模板方法模式的应用
- 简单工厂模式--介绍、应用及代码
- 如何应用模板模式在现有的代码中
- 【DRP】——Servlet与模板方法模式的应用