设计模式

模版模式

2019-06-01  本文已影响0人  78f6ced3a012

概述:抽象类定义了执行的方式(一系列步骤或者逻辑,方案,就是一个模子),子类可以重写父类的具体实现,但执行还是要使用父类的定义。

代码:定义一个下班回家的模版(离开公司,在路上,到家开门)

package com.example.java8.model.template;

/**
 * 模版模式
 * 功能:回家(离开公司--》在路上--》开门)
 */
public abstract class GoHomeTemplate {

    /**模版方法(加final避免重写)*/
    public final void exec(){
        this.leaveCompany();
        this.onTheWay();
        this.openDoor();
    }

    /**离开公司*/
    public abstract void leaveCompany();

    /**在路上*/
    public abstract void onTheWay();

    /**开门*/
    public abstract void openDoor();

}

A方法的实现模版

package com.example.java8.model.template;

public class AMethod extends GoHomeTemplate {
    @Override
    public void leaveCompany() {
        System.out.println("走电梯");
    }

    @Override
    public void onTheWay() {
        System.out.println("坐地铁");
    }

    @Override
    public void openDoor() {
        System.out.println("刷门禁卡");
    }
}

B方法的实现模版

package com.example.java8.model.template;

public class BMethod extends GoHomeTemplate {
    @Override
    public void leaveCompany() {
        System.out.println("走楼梯");
    }

    @Override
    public void onTheWay() {
        System.out.println("开小车");
    }

    @Override
    public void openDoor() {
        System.out.println("钥匙开门");
    }
}

测试

package com.example.java8.model.template;

import org.junit.Test;

public class TemplateTest {

    @Test
    public void testA(){
        GoHomeTemplate aMethod = new AMethod();
        aMethod.exec();
    }

    @Test
    public void testB(){
        GoHomeTemplate bMethod = new BMethod();
        bMethod.exec();
    }

}
上一篇下一篇

猜你喜欢

热点阅读