# “组件协作”模式

现代软件专业分工之后的第一个结果是“框架和应用程序的划分”，“组件协作”模式通过晚期绑定，来实现框架与应用程序之间的松耦合，是二者之间协作时常用的模式。

## :pencil2: Template Method（模板方法模式）

### 动机

* 在软件构建过程中，我们需要为某些对象建立一种“通知依赖关 系” ——一个对象（目标对象）的状态发生改变，所有的依赖对 象（观察者对象）都将得到通知。如果这样的依赖关系过于紧密， 将使软件不能很好地抵御变化。&#x20;
* 使用面向对象技术，可以将这种依赖关系弱化，并形成一种稳定 的依赖关系。从而实现软件体系结构的松耦合。

### 定义

定义一个操作中的算法的骨架 （稳定），而将一些步骤延迟 （变化）到子类中。 Template Method使得子类可以不改变 （复用）一个算法的结构即可重定义（override 重写）该算法的某些特定步骤。 ——《设计模式》

### 结构图

### 代码

{% tabs %}
{% tab title="Java" %}
```
```
{% endtab %}

{% tab title="C++" %}
```
```
{% endtab %}
{% endtabs %}

### 总结

* Template Method模式是一种非常基础性的设计模式，在面向对 象系统中有着大量的应用。它用最简洁的机制（虚函数的多态性） 为很多应用程序框架提供了灵活的扩展点，是代码复用方面的基本 实现结构。
* 除了可以灵活应对子步骤的变化外，“不要调用我，让我来调用 你”的反向控制结构是Template Method的典型应用。
* 在具体实现方面，被Template Method调用的虚方法可以具有实 现，也可以没有任何实现（抽象方法、纯虚方法），但一般推荐将 它们设置为protected方法。

## :pencil2: Strategy（策略模式）

## :pencil2: Observer（观察者模式）
