模板模式的特点:
1:父类抽象类:类中含有具体不变的方法和可变的抽象方法
2:钩子方法:钩子方法在父类中,有父类声明的子类实例化对象可以通过钩子方法访问子类实现的抽象方法
3:子类:继承父类、实现抽象方法
优点:
1:子类实现父类的方法,增加了程序的可扩展性
2:父类封装了公用代码,实现代码的重复利用
3:部分代码由子类扩展,符合开闭原则
缺点:
1:每一个实现都要有一个具体类,导致子类的不断增加,系统变得庞大
2:子类实现父类方法,导致子类的执行结果影响父类的执行结果,导致一种反向的控制结构,它提高了代码阅读的难度
直接上代码
首先创建父类抽象类
public abstract class TemplateTest {
public void getMessage(String msg){
System.out.println(msg);
getAdd(msg);
getAddOne(msg);
}
public abstract void getAdd(String msg);
public abstract void getAddOne(String msg);
}
创建子类实现抽象方法
@Component("templateTest")
public class TemplateTestImpl extends TemplateTest{
@Override
public void getAdd(String msg) {
System.out.println(msg+1);
}
@Override
public void getAddOne(String msg) {
System.out.println(msg+2);
}
}
测试类试一下
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ApplicationCpsp.class)
public class TemplateServiceImplTest {
@Autowired
private TemplateTest templateTest;
@org.junit.Test
public void test() {
templateTest.getMessage("test ");
}
}
结果
test
test 1
test 2