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

Posted Topze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-------模板方法模式相关的知识,希望对你有一定的参考价值。

模板方法模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

 

抽象类的父类,父类中定义了基本方法,模板方法和钩子方法。

基本方法:父类中定义,在子类中实现。

模板方法:父类中实现,调用基本方法,子类继承。

钩子方法:在父类中定义,变相的实现父类调用子类的方法。

 

具体例子如下:

父类:

 1 package pattern.templateMethod;
 2 
 3 public abstract class HummerModel {
 4 
 5     // 基本方法
 6     protected abstract void start();
 7 
 8     // 基本方法
 9     protected abstract void stop();
10 
11     // 基本方法
12     protected abstract void alarm();
13 
14     // 基本方法
15     protected abstract void engineBoom();
16 
17     // 模板方法
18     protected void run() {
19         this.start();
20         this.engineBoom();
21         if (this.isAlarm()) {
22             this.alarm();
23         }
24         this.stop();
25     }
26 
27     // 钩子方法
28     protected boolean isAlarm() {
29         return true;
30     }
31 
32 }

 

子类1:

 1 package pattern.templateMethod;
 2 
 3 public class HummerH1Model extends HummerModel {
 4 
 5     private boolean alarmFlag = true;
 6     
 7     @Override
 8     protected void start() {
 9 
10         System.out.println("H1 start....");
11     }
12 
13     @Override
14     protected void stop() {
15         System.out.println("H1 stop.....");
16     }
17 
18     @Override
19     protected void alarm() {
20         System.out.println("H1 alarm.....");
21     }
22 
23     @Override
24     protected void engineBoom() {
25         System.out.println("H1 engineBoom");
26     }
27     
28     @Override
29     protected boolean isAlarm() {
30         return this.alarmFlag;
31     }
32     
33     public void setAlarm(boolean isAlarm){
34         this.alarmFlag = isAlarm;
35     }
36 
37 
38 }

 

子类2:

package pattern.templateMethod;

public class HummerH2Model extends HummerModel {

    @Override
    protected void start() {

        System.out.println("H2 start....");
    }

    @Override
    protected void stop() {
        System.out.println("H2 stop.....");
    }

    @Override
    protected void alarm() {
        System.out.println("H2 alarm.....");
    }

    @Override
    protected void engineBoom() {
        System.out.println("H2 engineBoom");
    }


}

alarm方法是否调用由子类中的setAlarm决定,实现了在父类中调用子类的方法。

以上是关于设计模式-------模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之模板方法模式代码示例

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

行为型设计模式之模板方法模式

Spring针对事务处理提供哪两种事务编程模式。

设计模式之模板方法模式(Template Method)详解及代码示例

设计模式之模板方法模式实战解析