设计模式 — 模板模式

实现形式:抽象类定义了执行的方法(方法包含若干步骤),具体的步骤由子类重写实现。

使用场景: 

  • 有多个子类共同的步骤方法
  • 有重要的、复杂的共用方法

代码实例:

  代码场景:需要定义一个吃饭的模板,不管男人还是女人都要按照指定模板步骤进行吃饭。步骤为拿碗、吃饭、洗碗。

抽象模板类:AbstractEat

/**
 * 吃饭 抽象类
 * @author GaoYuan
 * @date 2018/11/11 下午7:21
 */
public abstract class AbstractEat {

    /** 定义了吃饭的步骤(模板) */
    public final void eat(){
        getBowl();
        startEat();
        washBowl();
    }

    /** 拿碗 */
    abstract void getBowl();
    /** 吃饭 */
    abstract void startEat();
    /** 洗碗 */
    abstract void washBowl();

}

具体实现子类 ManEat、WomanEat

/**
 * 男人吃饭
 * @author GaoYuan
 * @date 2018/11/11 下午7:21
 */
public class ManEat extends AbstractEat{

    @Override
    void getBowl() {
        System.out.println("ManEat getBowl()");
    }

    @Override
    void startEat() {
        System.out.println("ManEat startEat()");
    }

    @Override
    void washBowl() {
        System.out.println("ManEat washBowl()");
    }
}
/**
 * 女人吃饭
 * @author GaoYuan
 * @date 2018/11/11 下午7:21
 */
public class WomanEat extends AbstractEat{

    @Override
    void getBowl() {
        System.out.println("WomanEat getBowl()");
    }

    @Override
    void startEat() {
        System.out.println("WomanEat startEat()");
    }

    @Override
    void washBowl() {
        System.out.println("WomanEat washBowl()");
    }
}

测试

public static void main(String[] args){
    // 男人吃饭
    AbstractEat eat = new ManEat();
    eat.eat();
    // 女人吃饭
    eat = new WomanEat();
    eat.eat();
}

结果输出:

ManEat getBowl()
ManEat startEat()
ManEat washBowl()
WomanEat getBowl()
WomanEat startEat()
WomanEat washBowl()

转自:https://www.liangzl.com/get-article-detail-29577.html

原文地址:https://www.cnblogs.com/myseries/p/10837349.html