设计模式之模板模式
模板模板,重点在于模板两个字,既然是模板,肯定是有一些共性的内容的,或者是一套组合内容。我们把共性的这部分抽取出来,不就是父类吗。同样的既然他是模板,那就需要支持不同的情况,那么怎么支持呢,在子类中实现自己想要的方法啊。
就比如说是一份辞职信,哈哈,正好准备辞职。人事给了我一封固定的模板,我拿着这个模板,填写了我的个人信息,此时张三也想提离职,那么人事只需要把模板给他,他自行填写自己的信息。最后提交给人事处理就行了,这就是模板模式。
抽象类模板方法的实现
定义模板
package site.nemo.templete1; import java.util.logging.Logger; public abstract class templete { Logger logger = Logger.getLogger("templete"); public void doTemplete(){//这部分就是共性 logger.info("固定代码段"); doSomeThing(); logger.info("固定代码段"); }; public abstract void doSomeThing();//这就是每个人做的不同的事情 }
定义模板的实现方法1
package site.nemo.templete1; import java.util.logging.Logger; public class UseTemplete extends templete{ Logger logger = Logger.getLogger("templete"); @Override public void doSomeThing() { logger.info("一哥想离职 "); } }
定义模板的实现方法2
package site.nemo.templete1; import java.util.logging.Logger; public class UseTemplete2 extends templete{ Logger logger = Logger.getLogger("templete"); @Override public void doSomeThing() { logger.info("张三想离职 "); } }
定义测试的方法
package site.nemo.templete1; public class TempleteTest { public static void main(String[] args) { UseTemplete UseTemplete=new UseTemplete(); UseTemplete.doTemplete(); UseTemplete2 UseTemplete2=new UseTemplete2(); UseTemplete2.doTemplete(); } }
结果
使用接口完成模板模式
定义接口,定义个性的不同方法
package site.nemo.templete2; public interface Callback<V,T> { public V doSomeThing(T t); }
定义模板类方法
package site.nemo.templete2; import site.nemo.templete1.templete; import java.util.logging.Logger; public class UseTemplete3 { static Logger logger = Logger.getLogger("UseTemplete3"); public static void useTemplete(String str,Callback<String,String> callback){ logger.info("固定代码"); String result = callback.doSomeThing(str); logger.info(result); logger.info("固定代码"); } }
测试
package site.nemo.templete2; import java.util.logging.Logger; public class Test { static Logger logger = Logger.getLogger("Test"); public static void main(String[] args) { // useTemplete("张三想离职", new Callback<String, String>() { // public String doSomeThing(String s) { // return s; // } // }); UseTemplete3.useTemplete("一哥想离职", new Callback<String, String>() { public String doSomeThing(String s) { return s; } }); } public static void useTemplete(String str,Callback<String,String> callback){ logger.info("固定代码"); String result = callback.doSomeThing(str); logger.info(result); logger.info("固定代码"); } }
执行情况
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/15002590.html