模版模式
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();
}
}