原创内容,转载请注明出处
1、模版模式
模版模式,顾名思义,是指将一些通用的行为实现都已完成,然后一些可变的行为交由我们来实现完成。在实际生活中有很多这样的例子,比如填写合同协议或者其他文件,文件上已经有通用的信息,我们只需要填写我们的个人信息并且签名即可,该文件就是一个模版。
UML类图表示
创建父类SuperClass
package com.test.designermodel.templatemodel; public abstract class SuperClass { public void process(){ System.out.println("通用方法实现开始"); excute(); System.out.println("通用方法实现结束"); } protected abstract void excute(); }
创建子类实现类ConcreteClass
package com.test.designermodel.templatemodel; public class ConcreteClass extends SuperClass { @Override protected void excute() { System.out.println("---执行处理---"); } }
编写Junit测试代码
/** * Java模版模式 */ @Test public void testTemplateModel(){ ConcreteClass concreteClass = new ConcreteClass(); concreteClass.process(); }
测试结果如下
2、回调模式
回调模式在Spring中有大量应用,比如Spring 的DaoSupport系列类,都使用了模版和回调模式组合。
上述例子可以这样实现,将execute方法抽出来,做成一个接口。
UML类图表示
创建Supportclass类
package com.test.designermodel.templatemodel.callback; public class SupportClass { public void process(CallBack callBack){ System.out.println("通用方法实现开始"); callBack.excute(); System.out.println("通用方法实现结束"); } }
创建回调接口CallBack类
package com.test.designermodel.templatemodel.callback; public interface CallBack { public void excute(); }
创建Junit测试代码
/** * Java模版模式和回调模式 */ @Test public void testTemplateModelAndCallback(){ new SupportClass().process(new CallBack() { public void excute() { System.out.println("---------回调执行处理---------"); } }); }
测试结果如下图
源代码如附件
如上测试结果客户端调用SupportClass类的方法,SupportClass类之后会反过来调用客户端的Callback接口方法。