现在的位置: 首页 > 综合 > 正文

设计模式—模板方法模式

2014年03月11日 ⁄ 综合 ⁄ 共 1771字 ⁄ 字号 评论关闭

        今天中午学习了一下模板方法模式,这种模式应用很广泛,做过servlet开发的兄弟都知道自己需要继承HttpServlet抽象类,然后自己实现doGet(),doPost()方法。做过一些基于国外的一些web框架开发的兄弟应该知道,一般一个页面都需要一个后台保存的类,这个类都需要自己继承某个抽象类,然后实现其中特定的方法,这个方法有一些参数,主要是页面传来的参数等,在华为干过的肯定都知道,那边的开发都是基于某框架,然后自己写页面,后来保存更新等功能自己继承某个类,实现特定方法,等等等等。。。这些其实都是模板方法设计模式的作用。

        这种设计模式比较好的作用我个人发觉有一个,是这样的,将系统框架的实现者和具体业务的开发者分离开,就是说你做框架的就做框架,留好接口就行,业务系统开发的就安心做业务系统的开发,至于系统的性能啊,ORM映射啊什么的,你就别管了。罪恶啊,有一些刚学会开发的兄弟,,就这样开发下去,,好久以后还不知道这个框架是个什么原理,,苦于一直做民工...唉.....

        好了,来说说这种模式。这种模式,主要是有一个抽象类来组成,该抽象类一个主要的作用就是将不变化的逻辑实现出来,将业务方面的逻辑用抽象方法来表示,然后在不变的逻辑里面来调用抽象方法,该抽象方法会被子类继承实现。。多高明。。。。

        举个例子。

        基类将不变的逻辑实现在execute()方法中

package com.dev.design.templatemethod;

import java.util.ArrayList;
import java.util.List;

public abstract class AbstractProcessor {
	
	public final void execute(){
		List<String> list = new ArrayList<String>();
		System.out.println("begin to execute execute().....");
		run(list);
		System.out.println("end to execute execute().....");
		System.out.println(list.size());
	}
	
	
	protected abstract void run(List<String> list);
	
}

        
其中run()方法就是要处理业务逻辑的方法,业务逻辑经常变化,因此就是一个抽象的方法,由各个继承者实现就好了。

package com.dev.design.templatemethod;

import java.util.List;

public class DefaultProcessor extends AbstractProcessor {
	@Override
	protected void run(List<String> list) {
		// TODO Auto-generated method stub
		System.out.println("begin running.....");
		list.add("haha");
		list.add("hehe");
		System.out.println("end running.......");
	}	
}

看看测试类:

package com.dev.design.templatemethod;

public class Main {
	public static void main(String[] args) {
		AbstractProcessor processor = new DefaultProcessor();
		processor.execute();
	}
}

测试结果如下:

begin to execute execute().....
begin running.....
end running.......
end to execute execute().....
2

        针对其他类似的业务,我们同样实现AbstractProcessor类的run()方法就好了。一般在web框架中如何调用到具体的实现类?其实框架中会做出一个配置文件,针对特定的url的字符,来查找特定的processor。然后业务开发人员就安心的苦力写代码,按照配置文件的要求来做配置即可....

        脑力劳动就和体力劳动,,这样分开了.......

抱歉!评论已关闭.