模板方法模式--介绍、应用及代码
来源:互联网 发布:linux搭建lamp环境 编辑:程序博客网 时间:2024/05/22 05:24
一谈到模板方法,“菜鸟”们有自信了,因为它的存在,可以说大多数程序员都真正并应用过了设计模式,因为。。。
--------对模板方法感触最深的应该是公司技术大牛和刚入职的新员工。技术大牛搭建好主框架,具体实现交给新员工。
定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构既可重定义该算法中的某些特定步骤。
实例:
情景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 blocke.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!!!
1 0
- 模板方法模式--介绍、应用及代码
- 黑马程序员:ClassLoader介绍、自定义ClasLoader的应用及模板方法设计模式
- 简单工厂模式--介绍、应用及代码
- 单例模式--介绍、应用及代码
- 代理模式--介绍、应用及代码
- 适配器模式--介绍、应用及代码
- 建造者模式--介绍、应用及代码
- 迭代器模式--介绍、应用及代码
- 策略模式--介绍、应用及代码
- 装饰器模式--介绍、应用及代码
- MVC模式介绍及应用
- Android设计模式应用-模板方法模式
- 浅学设计模式之模板<Template>方法模式及在android中的应用
- ViewDragHelper通用模板代码及应用
- 模板方法模式--钩子的应用
- TemplateMethod模板方法模式之应用
- java模板方法模式的应用
- Template Method 模板方法模式代码
- iOS开发: cocoapods的安装与使用
- C语言接口与实现创建可重用软件的技术读书笔记(1)
- 全排列算法
- Servlet和Jsp 设置编码格式
- SSH框架整合后,请求数次页面成功后无法正常跳转,显示等待localhost响应,并不报错。出现的原因
- 模板方法模式--介绍、应用及代码
- unity3d开发2d游戏中控制摄像机移动以及主角移动
- 网友爆料,在佳木斯市发生一起
- 在嵌入式Linux系统上安装打印机
- hdu3652
- ora-01102解决办法
- 继承、实现、依赖、关联、聚合、组合的联系与区别
- SAP项目管理模块培训教材
- 使用 XZ Utils 获得更高的压缩率