目录
(1)接口:ConfigurableApplicationContext
(2)该接口的子类AbstractApplicationContext
(3)AbstractApplicationContext的子类
1.组件协作模式简介
现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,这样的划分它们之间必然有协作的问题
“组件协作”模式通过晚期绑定,来实现框架与应用之间的松耦合,是二者之间协作常用的模式
以下三个模式在这个层面体现更为明显:
- 模板方法模式(Template Method)
- 策略模式(Strategy)
- 观察者模式(Observer)
2.模板方法模式
2.1 基本介绍
- 模板方式模式(Template Method),又叫模板模式
- 在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行
- 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中,模板方法模式使得子类可以不改变(复用)一个算法的结构,就可以重定义该算法的某些特定步骤
2.2 动机
- 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但是各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系),而无法和任务整体结构同时实现
- 即此模式解决的是如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求
2.3 模板方法模式的原理类图
- AbstractClass抽象类,类中实现了模板方法,定义了算法的骨架,具体子类需要去实现其他的抽象方法operation2,3,4
- ConcretClass实现抽象方法operation2,3,4,以完成算法中特定子类的相关步骤
2.4 案例
案例1:程序库与应用开发之间的关系
传统方式:
/**
* 程序库开发人员实现
*/
class Library{
public void step1(){
//...
}
public void step3(){
//...
}
public void step5(){
//...
}
}
/**
* 应用程序开发人员实现
*/
class Application{
public boolean step2(){
//...
return true;
}
public void step4(){
//...
}
}
public class Client{
public static void main(String[] args) {
Library lib = new Library();
Application app = new Application();
lib.step1();
if(app.step2())
{
lib.step3();
}
for (int i = 0; i < 4; i++) {
app.step4();
}
lib.step5();
}
}
分析:
- 此种写法为结构化软件设计流程:
- Library开发人员:
- 1.开发1,3,5三个步骤
- Application开发人员:
- 1.开发2,4步骤
- 2.程序主流程,实现多个方法的调用步骤
- Library开发人员:
模板方法实现:
/**
* 程序库开发人员
*/
abstract class Library{
/**
*稳定中有变化
*/
//稳定部分,模板方法
public void run()
{
step1();
if(step2()) //支持变化===>多态调用
{
step3();
}
for (int i = 0; i < 4; i++) {
step4(); //支持变化===>多态调用
}
step5();
}
public void step1(){ //稳定部分
//...
}
public void step3(){ //稳定部分
//...
}
public void step5(){ //稳定部分
//...
}
protected abstract boolean step2(); //变化部分,推荐变化的部分实现为protected,一位一般该方法单独被外界调用没有意义,
//它放在一个流程中才有意义
protected abstract void step4(); //变化部分
}
/**
*