`

行为型模式-模板方法模式(Template Method)

阅读更多

一:定义:

Template Method:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

二:引入

一个咖啡店,卖咖啡和茶。

制作咖啡的步骤是:

  1. 把水煮开。
  2. 放入咖啡。
  3. 把煮好的咖啡倒进杯子。
  4. 加糖或奶。 

制作茶的步骤是:

  1. 把水煮开。
  2. 放入茶叶。
  3. 把茶倒进茶杯。
  4. 加柠檬或其他调料。
public class Coffee  ...{
    
public  void prepareRecipe()
    
...{
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    
void boilWater()
    
...{
        System.out.println(
"boil water");
    }

    
public void brew()
    
...{
        System.out.println(
"brew coffee");
    }


    
void pourInCup()
    
...{
        System.out.println(
"pour in cup");
    }

    
public void addCondiments()
    
...{
        System.out.println(
"add sugar");
    }

}


public class Tea  ...{
    
public  void prepareRecipe()
    
...{
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    
void boilWater()
    
...{
        System.out.println(
"boil water");
    }

    
public void brew()
    
...{
        System.out.println(
"brew tea");
    }

    
void pourInCup()
    
...{
        System.out.println(
"pour in cup");
    }

    
public void addCondiments()
    
...{
        System.out.println(
"add lemon");
    }

}

我们发现,制作两种饮料的方法有些地方是类似的,我们可以对这两个类进行抽象。

public abstract class CaffeineBeverage ...{
    
public final void prepareRecipe()
    
...{
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    
void boilWater()
    
...{
        System.out.println(
"boil water");
    }

    
    
void pourInCup()
    
...{
        System.out.println(
"pour in cup");
    }

    
     
abstract void brew();
     
abstract void addCondiments();
}


public class Coffee extends CaffeineBeverage ...{
    
public void brew()
    
...{
        System.out.println(
"brew coffee");
    }


    
public void addCondiments()
    
...{
        System.out.println(
"add sugar");
    }

}


public class Client ...{
    
public static void main(String[] args) ...{
        CaffeineBeverage beverage
=new Coffee();
        beverage.prepareRecipe();

    }

}

父类提供了一个按步骤执行方法的模板,公共部分已经在父类实现,其它由具体子类自己实现。 

三:结构

    

四:实际应用

  1.   javx.servlet.http.HttpServlet

HttpServlet代码,doGet等方法由子类实现。

public abstract class HttpServlet
extends GenericServlet
implements Serializable
...{

protected void service(HttpServletRequest request,HttpServletResponse response)
    
throws ServletException, IOException
  
...{
    
if(request.getMethod().equals("GET") )
      
...{
    
if(testConditional(request,response))
      doGet(request,response);
      }

    
else if (request.getMethod().equals("HEAD") )
      
...{
    
if(testConditional(request,response))
      doHead(request,response);
      }

    
else if (request.getMethod().equals("POST") )
      
...{
    doPost(request,response);
      }

    
else if (request.getMethod().equals("DELETE") )
      
...{
    doDelete(request,response);
      }

    
else if (request.getMethod().equals("OPTIONS") )
      
...{
    doOptions(request,response);
      }

    
else if (request.getMethod().equals("PUT") )
      
...{
    doPut(request,response);
      }

    
else if (request.getMethod().equals("TRACE") )
      
...{
    doTrace(request,response);
      }

    
else
      
...{
    response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Method ""
               
+request.getMethod()+"" is not supported by this servlet");
      }

  }

  
   
protected void doGet(HttpServletRequest request,HttpServletResponse response)
    
throws ServletException, IOException
分享到:
评论

相关推荐

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

    template-method-demo 模板方法示例

    在"template-method-demo"这个示例中,我们可以预见到它将展示如何在Java中应用模板方法模式。这个压缩包可能包含以下内容: 1. 一个抽象类(例如:`AbstractClass`),它定义了模板方法。在这个类中,可能会有一个...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    设计模式C++学习之模板方法模式(Template Method)

    模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...

    设计模式-模板方法模式ppt

    - **抽象类(Abstract Class)**:包含一个或多个抽象方法,并且有一个模板方法(template method)。模板方法通常被声明为final,这意味着它不能被子类覆盖。 - **具体操作(Concrete Operations)**:在抽象类中...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    java设计模式-模板模式

    3. **模板方法(Template Method)**:这是在抽象类中定义的方法,它调用了一个或多个钩子方法(即抽象方法或可选的具体方法)。模板方法执行整体算法的顺序,并且通常在最后调用钩子方法以完成算法的定制部分。 4....

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...

    [行为型模式] 模板方法模式的理解

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在创建算法骨架时。这种模式允许我们在父类中定义一个算法的框架,而将具体步骤延迟到子类中实现,从而实现了代码复用和扩展。下面...

    C++设计模式课件3_Template Method_模板方法.pdf

    模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 #### 模式背景...

    08-模板方法模式.pdf

    模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,并将一些步骤延迟到子类中。这种模式允许子类在不改变算法结构的情况下,重新定义算法的某些特定步骤。 #### 二、...

    模板方法模式----设计模式系列

    模板方法模式是面向对象设计模式的一种,它在行为模式中占据重要地位。此模式的核心思想是定义一个操作的框架,允许子类在这个框架内自定义具体的行为。这为代码复用和实现相同逻辑的不同实现提供了方便,同时也遵循...

    模版方法模式TemplatePattern

    模板方法模式(Template Pattern)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类重新定义或改变某些基本操作,但整体结构和顺序保持不变。在Java编程中,...

    Template(模板模式)

    模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义对象间的一系列基本操作,并在子类中实现这些操作的具体步骤。在模板模式中,一个抽象类公开定义了执行它的方法的方式,而将具体实现延迟到子类中...

    L14-设计模式-行为型模式v21

    2. 模板方法(Template Method)模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以在不修改算法结构的情况下重新定义该算法的某些步骤。 模板方法模式的优点是:可以实现算法的灵活性和可...

    设计模式_行为型_模板方法模式.md

    模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 ### 模板方法模式的关键角色 1. **...

    C++设计模式代码资源3_Template Method_模板方法.zip

    "模板方法"(Template Method)是设计模式中的一个经典概念,它属于行为设计模式,主要用在父类中定义一个算法的框架,允许子类在这个框架内重定义特定的步骤。这个模式通常用于代码复用和保持代码结构的一致性。 ...

    设计模式专题之(十三)模板模式---设计模式模板模式示例代码(python--c++)

    模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义执行算法的框架,而将一些步骤延迟到子类中。这样,你就能创建一个可复用的框架,将具体步骤留给子类来实现。这个模式的核心思想是抽象类定义了一...

Global site tag (gtag.js) - Google Analytics