疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

J2EE Servlet 模板方法模式


 

         在JAVA中用到了很多设计模式,我们常用的Servlet类利用了一个模板方法来实现,在处理客户端请求时不用管是具体调用了POST或GET请求,这个类会自己进行判断,具体实现需要我们自己实现。
         它是应用于这样一种场景,当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理.比如在Servlet类的实现上,里面有很多的方法doPost()/doGet()等等,它们之间的调用顺序已经被定义好了,具体的实现由它的子类来实现。因为每个请求是不同的但它们调用的方法相同,不同的实现由子类来完成。
Java 代码
[java] view plaincopyprint?
<span style="font-size:18px;">package com.bjpowernode.pattern;  
/** 
 * 抽象类,模板 
 * @author LLS 
 * 
 */  
public abstract class AbstractClass {  
      
    public static final String METHOD_1="m1";  
    public static final String METHOD_2="m2";  
    //模板方法  
    public final void templateMethod(String methodName)  
    {  
        if (METHOD_1.equals(methodName)) {  
            doOperater1(methodName);  
        }  
        if (METHOD_2.equals(methodName)) {  
            doOperater2(methodName);  
        }     
    }  
    //具体方法1  
    protected abstract void doOperater1(String methodName);  
    //具体方法2  
    protected abstract void doOperater2(String methodName);  
}</span>  
[java] view plaincopyprint?
<p><span style="font-size:18px;">package com.bjpowernode.pattern;  
/** 
 * 具体实现类 
 * @author LLS 
 * 
 */  
public class ConcreteClass extends AbstractClass {</span></p><p><span style="font-
 
size:18px;"> @Override  
 protected void doOperater1(String methodName) {  
  System.out.println("concrete--operater1"+methodName);  
 }</span></p><p><span style="font-size:18px;"> @Override  
 protected void doOperater2(String methodName) {  
  System.out.println("concrete--operater1"+methodName);  
 }</span></p><p><span style="font-size:18px;">}</span></p>  
[java] view plaincopyprint?
<p><span style="font-size:18px;"></span> </p><p><span style="font-size:18px;">package 
com.bjpowernode.pattern;</span></p><p><span style="font-size:18px;">public class test 
 
{</span></p><p><span style="font-size:18px;"> /** 
  * 测试模板方法 
  * @param args 
  */  
 public static void main(String[] args) {  
  AbstractClass a=new ConcreteClass();  
  a.templateMethod(AbstractClass.METHOD_1);  
 }</span></p><p><span style="font-size:18px;">}</span></p><p><span style="font-size:18px;"></span> </p>  
        模板方法模式是通过把不变的行为搬到超类,去除子类中的重复代码来体现它的优势 。 它提供了一个很好的代码服用平台,因为有时候我们会遇到由一系列步骤构成的过程需要执行,从这个过程高层次看是相同的,但有些步骤的实现可能不同。
         当不变的和可变的行为在方法的子类实现中混在一起的时候,不变的行为在子类中重复出现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。