四。 模板方法模式

Definition: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. 

Templet Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

它包含一个抽象模板和一些具体的模板。

抽象模板中包含两类方法:

  • 基本方法
    • 也叫基本操作,是有抽象模板给出抽象接口,子类给出实现的方法,并且这些方法会在模板方法中被调用;
    • 基本方法尽量设计为protected类型,符合迪米特法则
  • 模板方法
    • 可以有一个或几个,一般是一个具体方法,实现对基本方法的调度,完成固定的逻辑。
    • 为了防止恶意的操作,,一般模板方法都会加上final关键字,不允许被覆写。

Demo Coding:

package com.model;

public abstract class HummerModel {
    /**
     * 首先,这个模型要能发动起来,不管是电力发动还是手摇发动
     * 所以具体是怎么发动就要根据不同的型号自己实现发动的方法
     */
    public abstract void start();
    
    /**
     * 不仅能够发动,还要能够停止
     */
    public abstract void stop();
    
    /**
     * 按喇叭会响
     */
    public abstract void alarm();
    
    /**
     * 发动引擎时有隆隆声
     */
    public abstract void engineBoom();
    
    public void run() {
        this.start();
        this.engineBoom();
        this.alarm();
        this.stop();
    }    
}



package com.model;

public class HummerH1Model extends HummerModel {

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("H1型号是这样启动的.....");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("H1型号是这样停止的.....");
    }

    @Override
    public void alarm() {
        // TODO Auto-generated method stub
        System.out.println("H1型号是这样鸣笛的......");
    }

    @Override
    public void engineBoom() {
        // TODO Auto-generated method stub
        System.out.println("H1型号是这样发动引擎的......");
    }

}




package com.model;

public class HummerH2Model extends HummerModel {

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("H2型号是这样启动的......");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("H2型号是这样停止的......");
    }

    @Override
    public void alarm() {
        // TODO Auto-generated method stub
        System.out.println("H2型号是这样鸣笛的......");
    }

    @Override
    public void engineBoom() {
        // TODO Auto-generated method stub
        System.out.println("H2型号是这样发动引擎的......");
    }

}



package com.model;

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //某公司要H1模型的悍马汽车
        HummerModel hm = new HummerH1Model();
        //H1模型演示如下
        hm.run();
    }

}
View Code

相关文章:

  • 2022-01-10
  • 2021-06-17
  • 2021-06-04
  • 2021-07-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-24
  • 2021-09-19
  • 2021-10-03
  • 2021-11-21
  • 2021-08-06
  • 2021-11-11
相关资源
相似解决方案