原创内容,转载请注明出处
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接口方法。